HEX
Server: Apache
System: Linux p102.lithium.hosting 4.18.0-553.141.1.el8_10.x86_64 #1 SMP Fri Jul 10 17:48:02 UTC 2026 x86_64
User: bvzmoamr (9955)
PHP: 8.1.34
Disabled: syslog
Upload Files
File: //usr/lib64/python2.7/site-packages/mercurial/revlogutils/deltas.pyo
�
1�3\c@@sudZddlmZddlZddlZddlZddlmZddlm	Z	ddl
mZmZdd	l
mZdd
lmZmZdZdefd��YZddd
�Zdd�Zdddd�Zdd�Zdd�Zd�Zejdede�defd��Y�Zd�Zd�Z d�Z!d�Z"d�Z#defd��YZ$dS(s4Helper class to compute deltas stored inside revlogsi(tabsolute_importNi(tnullrev(t_i(tREVIDX_ISCENSOREDtREVIDX_RAWTEXT_CHANGING_FLAGS(tattr(terrortmdifft_testrevlogcB@sAeZdZddd�Zd�Zd�Zd�Zd�ZRS(s)minimalist fake revlog to use in doctestsg�?icC@s||_||_||_dS(s.data is an list of revision payload boundariesN(t_datat_srdensitythresholdt
_srmingapsize(tselftdatatdensitytmingap((sB/usr/lib64/python2.7/site-packages/mercurial/revlogutils/deltas.pyt__init__*s		cC@s|dkrdS|j|dS(Nii(R	(Rtrev((sB/usr/lib64/python2.7/site-packages/mercurial/revlogutils/deltas.pytstart0scC@s|j|S(N(R	(RR((sB/usr/lib64/python2.7/site-packages/mercurial/revlogutils/deltas.pytend5scC@s|j|�|j|�S(N(RR(RR((sB/usr/lib64/python2.7/site-packages/mercurial/revlogutils/deltas.pytlength8scC@s
t|j�S(N(tlenR	(R((sB/usr/lib64/python2.7/site-packages/mercurial/revlogutils/deltas.pyt__len__;s(t__name__t
__module__t__doc__RRRRR(((sB/usr/lib64/python2.7/site-packages/mercurial/revlogutils/deltas.pyR's			cc@s�|dk	r!t||j�}n|dkp6|dksQd}tj|��nxHt||||j|j�D](}xt|||�D]}|Vq�WqpWdS(s�slice revs to reduce the amount of unrelated data to be read from disk.

    ``revs`` is sliced into groups that should be read in one time.
    Assume that revs are sorted.

    The initial chunk is sliced until the overall density (payload/chunks-span
    ratio) is above `revlog._srdensitythreshold`. No gap smaller than
    `revlog._srmingapsize` is skipped.

    If `targetsize` is set, no chunk larger than `targetsize` will be yield.
    For consistency with other slicing choice, this limit won't go lower than
    `revlog._srmingapsize`.

    If individual revisions chunk are larger than this limit, they will still
    be raised individually.

    >>> revlog = _testrevlog([
    ...  5,  #00 (5)
    ...  10, #01 (5)
    ...  12, #02 (2)
    ...  12, #03 (empty)
    ...  27, #04 (15)
    ...  31, #05 (4)
    ...  31, #06 (empty)
    ...  42, #07 (11)
    ...  47, #08 (5)
    ...  47, #09 (empty)
    ...  48, #10 (1)
    ...  51, #11 (3)
    ...  74, #12 (23)
    ...  85, #13 (11)
    ...  86, #14 (1)
    ...  91, #15 (5)
    ... ])

    >>> list(slicechunk(revlog, list(range(16))))
    [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]]
    >>> list(slicechunk(revlog, [0, 15]))
    [[0], [15]]
    >>> list(slicechunk(revlog, [0, 11, 15]))
    [[0], [11], [15]]
    >>> list(slicechunk(revlog, [0, 11, 13, 15]))
    [[0], [11, 13, 15]]
    >>> list(slicechunk(revlog, [1, 2, 3, 5, 8, 10, 11, 14]))
    [[1, 2], [5, 8, 10, 11], [14]]

    Slicing with a maximum chunk size
    >>> list(slicechunk(revlog, [0, 11, 13, 15], targetsize=15))
    [[0], [11], [13], [15]]
    >>> list(slicechunk(revlog, [0, 11, 13, 15], targetsize=20))
    [[0], [11], [13, 15]]
    s*cannot use `targetsize` with a `deltainfo`N(tNonetmaxRRtProgrammingErrort_slicechunktodensityR
t_slicechunktosize(trevlogtrevst	deltainfot
targetsizetmsgtchunktsubchunk((sB/usr/lib64/python2.7/site-packages/mercurial/revlogutils/deltas.pyt
slicechunk>s5cc@s�|dks!t||�|kr*|VdSd}|j|d�}d}t|�}t|�x~|D]v\}}|j|�|}	|	|kr�|}qft||||d�}
|
r�|
Vn|}|j|�}|}qfWt|||�VdS(s�slice revs to match the target size

    This is intended to be used on chunk that density slicing selected by that
    are still too large compared to the read garantee of revlog. This might
    happens when "minimal gap size" interrupted the slicing or when chain are
    built in a way that create large blocks next to each other.

    >>> revlog = _testrevlog([
    ...  3,  #0 (3)
    ...  5,  #1 (2)
    ...  6,  #2 (1)
    ...  8,  #3 (2)
    ...  8,  #4 (empty)
    ...  11, #5 (3)
    ...  12, #6 (1)
    ...  13, #7 (1)
    ...  14, #8 (1)
    ... ])

    Cases where chunk is already small enough
    >>> list(_slicechunktosize(revlog, [0], 3))
    [[0]]
    >>> list(_slicechunktosize(revlog, [6, 7], 3))
    [[6, 7]]
    >>> list(_slicechunktosize(revlog, [0], None))
    [[0]]
    >>> list(_slicechunktosize(revlog, [6, 7], None))
    [[6, 7]]

    cases where we need actual slicing
    >>> list(_slicechunktosize(revlog, [0, 1], 3))
    [[0], [1]]
    >>> list(_slicechunktosize(revlog, [1, 3], 3))
    [[1], [3]]
    >>> list(_slicechunktosize(revlog, [1, 2, 3], 3))
    [[1, 2], [3]]
    >>> list(_slicechunktosize(revlog, [3, 5], 3))
    [[3], [5]]
    >>> list(_slicechunktosize(revlog, [3, 4, 5], 3))
    [[3], [5]]
    >>> list(_slicechunktosize(revlog, [5, 6, 7, 8], 3))
    [[5], [6, 7, 8]]
    >>> list(_slicechunktosize(revlog, [0, 1, 2, 3, 4, 5, 6, 7, 8], 3))
    [[0], [1, 2], [3], [5], [6, 7, 8]]

    Case with too large individual chunk (must return valid chunk)
    >>> list(_slicechunktosize(revlog, [0, 1], 2))
    [[0], [1]]
    >>> list(_slicechunktosize(revlog, [1, 3], 1))
    [[1], [3]]
    >>> list(_slicechunktosize(revlog, [3, 4, 5], 2))
    [[3], [5]]
    Nii(RtsegmentspanRt	enumeratetnextRt
_trimchunk(RR R"tstartrevidxt	startdatat	endrevidxtiterrevstidxtrtspanR$((sB/usr/lib64/python2.7/site-packages/mercurial/revlogutils/deltas.pyR�s&7!
	
g�?c#@s�|j}|j�t|�dkr-|VdSt|�}|j|d�}|dkr�t||�}t�fd�|D��}	n|j}|j}	||kr�|VdS|}
|r�|	t	|�}nd}||kr�|VdS|dk	r|j
rt|�}|j|�ng}t
j|�d}
x�t|�D]�\}}||krq||�}�|�}n|}|j
}|dkr�q>n|
dk	r�||
}||kr�t
j|||f�q�n||}
q>Wg}t
j|�xk|r_||kr_t
j|�\}}t
j||�|
|8}
|
dkrV|	t	|
�}q�d}q�Wd}xB|r�t
j|�}t||||�}|r�|Vn|}qiWt|||�}|r�|VndS(sslice revs to reduce the amount of unrelated data to be read from disk.

    ``revs`` is sliced into groups that should be read in one time.
    Assume that revs are sorted.

    ``deltainfo`` is a _deltainfo instance of a revision that we would append
    to the top of the revlog.

    The initial chunk is sliced until the overall density (payload/chunks-span
    ratio) is above `targetdensity`. No gap smaller than `mingapsize` is
    skipped.

    >>> revlog = _testrevlog([
    ...  5,  #00 (5)
    ...  10, #01 (5)
    ...  12, #02 (2)
    ...  12, #03 (empty)
    ...  27, #04 (15)
    ...  31, #05 (4)
    ...  31, #06 (empty)
    ...  42, #07 (11)
    ...  47, #08 (5)
    ...  47, #09 (empty)
    ...  48, #10 (1)
    ...  51, #11 (3)
    ...  74, #12 (23)
    ...  85, #13 (11)
    ...  86, #14 (1)
    ...  91, #15 (5)
    ... ])

    >>> list(_slicechunktodensity(revlog, list(range(16))))
    [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]]
    >>> list(_slicechunktodensity(revlog, [0, 15]))
    [[0], [15]]
    >>> list(_slicechunktodensity(revlog, [0, 11, 15]))
    [[0], [11], [15]]
    >>> list(_slicechunktodensity(revlog, [0, 11, 13, 15]))
    [[0], [11, 13, 15]]
    >>> list(_slicechunktodensity(revlog, [1, 2, 3, 5, 8, 10, 11, 14]))
    [[1, 2], [5, 8, 10, 11], [14]]
    >>> list(_slicechunktodensity(revlog, [1, 2, 3, 5, 8, 10, 11, 14],
    ...                           mingapsize=20))
    [[1, 2, 3, 5, 8, 10, 11], [14]]
    >>> list(_slicechunktodensity(revlog, [1, 2, 3, 5, 8, 10, 11, 14],
    ...                           targetdensity=0.95))
    [[1, 2], [5], [8, 10, 11], [14]]
    >>> list(_slicechunktodensity(revlog, [1, 2, 3, 5, 8, 10, 11, 14],
    ...                           targetdensity=0.95, mingapsize=12))
    [[1, 2], [5, 8, 10, 11], [14]]
    iNc3@s|]}�|�VqdS(N((t.0R0(R(sB/usr/lib64/python2.7/site-packages/mercurial/revlogutils/deltas.pys	<genexpr>sg�?i(RRRRRR'tsumtdistancetcompresseddeltalentfloattdeltalentlisttappendtheapqtheapifyR(theappushtheappopR*(RR R!t
targetdensityt
mingapsizeRtnextrevt
nextoffsettdeltachainspantchainpayloadtreaddataRtgapsheaptprevendtiRtrevstarttrevlentgapsizetindicesheapt
oppgapsizetgapidxtprevidxR/R$((RsB/usr/lib64/python2.7/site-packages/mercurial/revlogutils/deltas.pyR�sx5				
	


	
cC@s�|j}|dkr$t|�}n||dt|�kr�xC|dkr�||kr�|||d�dkr�|d8}qAWn|||!S(s�returns revs[startidx:endidx] without empty trailing revs

    Doctest Setup
    >>> revlog = _testrevlog([
    ...  5,  #0
    ...  10, #1
    ...  12, #2
    ...  12, #3 (empty)
    ...  17, #4
    ...  21, #5
    ...  21, #6 (empty)
    ... ])

    Contiguous cases:
    >>> _trimchunk(revlog, [0, 1, 2, 3, 4, 5, 6], 0)
    [0, 1, 2, 3, 4, 5]
    >>> _trimchunk(revlog, [0, 1, 2, 3, 4, 5, 6], 0, 5)
    [0, 1, 2, 3, 4]
    >>> _trimchunk(revlog, [0, 1, 2, 3, 4, 5, 6], 0, 4)
    [0, 1, 2]
    >>> _trimchunk(revlog, [0, 1, 2, 3, 4, 5, 6], 2, 4)
    [2]
    >>> _trimchunk(revlog, [0, 1, 2, 3, 4, 5, 6], 3)
    [3, 4, 5]
    >>> _trimchunk(revlog, [0, 1, 2, 3, 4, 5, 6], 3, 5)
    [3, 4]

    Discontiguous cases:
    >>> _trimchunk(revlog, [1, 3, 5, 6], 0)
    [1, 3, 5]
    >>> _trimchunk(revlog, [1, 3, 5, 6], 0, 2)
    [1]
    >>> _trimchunk(revlog, [1, 3, 5, 6], 1, 3)
    [3, 5]
    >>> _trimchunk(revlog, [1, 3, 5, 6], 1)
    [3, 5]
    iiN(RRR(RR tstartidxtendidxR((sB/usr/lib64/python2.7/site-packages/mercurial/revlogutils/deltas.pyR*_s&	cC@s�|s
dS|dk	rnt|�|dkrnt|�dkrE|jS|jt|�d�}|j|}n|j|d�}||j|d�S(s�Get the byte span of a segment of revisions

    revs is a sorted array of revision numbers

    >>> revlog = _testrevlog([
    ...  5,  #0
    ...  10, #1
    ...  12, #2
    ...  12, #3 (empty)
    ...  17, #4
    ... ])

    >>> segmentspan(revlog, [0, 1, 2, 3, 4])
    17
    >>> segmentspan(revlog, [0, 4])
    17
    >>> segmentspan(revlog, [3, 4])
    5
    >>> segmentspan(revlog, [1, 2, 3,])
    7
    >>> segmentspan(revlog, [1, 3])
    7
    ii����iN(RRR7RR(RR R!toffsetR((sB/usr/lib64/python2.7/site-packages/mercurial/revlogutils/deltas.pyR'�s"c
C@stjd�}|| tj|j|�t|�|�krK||}	n-|j|d|dt�}
tj|
|�}	yv|j	|	|ddt
�}|\}	}|r�|j|	|d|d|�n|t@r�t
jtd�|��nWn$t
jk
r|t@s�qnX|	S(s<build full text from a (base, delta) pair and other metadatas>lllt_dftrawtreadtp1tp2snode %s is not censored(tstructtcalcsizeRtreplacediffheadertrawsizeRtrevisiontFalsetpatcht
_processflagstTruet	checkhashRRtStorageErrorRtCensoredNodeError(
tfhRtbaserevtdeltaRURVtflagstexpectednodethlentfulltexttbasetexttrestvalidatehash((sB/usr/lib64/python2.7/site-packages/mercurial/revlogutils/deltas.pyt_textfromdelta�s$



tslotstfrozent
_deltainfocB@sheZej�Zej�Zej�Zej�Zej�Zej�Z	ej�Z
ej�ZRS((RRRtibR4R7R
tbaset	chainbasetchainlenR5t
snapshotdepth(((sB/usr/lib64/python2.7/site-packages/mercurial/revlogutils/deltas.pyRp�scC@s�|dkrtS|jr�|j}|tkrD|j|�d}ng}x-t|�D]\}}|j|�sWPqWqWW||}t|||�}g|D]}t	|||�^q�}	t
|	�}
n	|j}
|j}|d}|j
}
|
s�|
}
nt
|
|�}
|jr1|
|jkr1|j}
n|
|
krAtS||jkrTtS|t|jkrktS|jr�|j|jkr�tS|jdk	r�||j?|jkr�tS|jr�|j|j�|jkr�tStS(s�Returns True if the given delta is good. Good means that it is within
    the disk span, disk size, and chain length bounds that we know to be
    performant.iiN(RR\t
_sparserevlogRrRt_deltachainR(t
issnapshotR&R'RR4ttextlent_maxdeltachainspanRR7tLIMIT_DELTA2TEXTR5t_maxchainlenRtRuRR_(RR!trevinfoRrt
deltachainR/R0tchunksR tall_spanR4Ryt
defaultmaxtmaxdist((sB/usr/lib64/python2.7/site-packages/mercurial/revlogutils/deltas.pytisgooddeltainfo�sP		
"		
				cc@s�t|�o|jsdVdS|j}|j}d}|t}ttg�}	t||||�}
xt	r||
j
|�}|dkr�Png}x�|D]�}
xK|jr�|
tkp�|
|	kp�||
�r�|	j|
�||
�}
q�W|
|	kr�q�n|	j|
�||j|
�kr'q�n|
tkr9q�n|j
|
�t@rRq�n|j|
�q�W|rgt|�V}qgqgWdVdS(s�Provides group of revision to be tested as delta base

    This top level function focus on emitting groups with unique and worthwhile
    content. See _raw_candidate_groups for details about the group order.
    N(Rt_storedeltachainsRRtdeltaparentR{tsetRt_refinedgroupsR_tsendt
_generaldeltataddRfRR9ttuple(RRyRURVt
cachedeltatdeltalengthR�tgoodtdeltas_limitttestedt
candidatest
temptativetgroupR((sB/usr/lib64/python2.7/site-packages/mercurial/revlogutils/deltas.pyt_candidategroups:sD		
	



cC@sV|j}|j}x=|j|�D],}||�r"|||�j|�q"q"WdS(s#find snapshot from start_rev to tipN(R�RxR R9(Rtcachet	start_revR�RxR((sB/usr/lib64/python2.7/site-packages/mercurial/revlogutils/deltas.pyt_findsnapshotsps
		c
c@swd}|rD|jrD|jrD|dfV}|dk	rDdVdSnx4t||||�D]}|V}|dk	rZPqZqZW|js�dVdS|dk	rn|||fkrn|j|�rnd}x?||kr|}|j|�}|tkr�Pn|fV}q�Wtj	t
�}t|||d�d}x@||krj|}tt
d�||D���}	|	V}q.WndVdS(Niics@s|]}|VqdS(N((R2tc((sB/usr/lib64/python2.7/site-packages/mercurial/revlogutils/deltas.pys	<genexpr>�s(RR�t_lazydeltabaset
_rawgroupsRvRxR�RtcollectionstdefaultdictR8R�R�tsorted(
RRURVR�R�R�tpreviousRrt	snapshotstchildren((sB/usr/lib64/python2.7/site-packages/mercurial/revlogutils/deltas.pyR�xs:	- c#@sX�j}�j}t��}|d}�fd�}|r�g||fD]}	|	tkrJ|	^qJ}
�jr�t|
�dkr�|
j�|
dfV|
dfVq�t|
�dkr�|
Vq�n|rC|
rCtjt�}tjt	�}g|
D]}	||	�^q�}
xO|
D]G}x>t
|�D]0\}}�j|�sHPn||j|�q)WqWt
|d�d}t�||�t	�}x|
D]}|j|�q�Wd}x0�j||�D]}||kr�|}Pq�q�W|dk	rut|j��}||�}xct
|�D]R\}}||kr:qn||krJPn�j|�s]Pn||j|�qWnd}x�t|j�dt�D]�\}}t	�}x|D]}|j||�q�W|dk	r�g|D]}||kr�|^q�}ntt|��Vtt|��Vt
|�}q�Wt|t�Vn|sT|fVndS(s�Provides group of revision to be tested as delta base

    This lower level function focus on emitting delta theorically interresting
    without looking it any practical details.

    The group order aims at providing fast or small candidates first.
    ic@s�j|�dS(Ni(Rw(R(R(sB/usr/lib64/python2.7/site-packages/mercurial/revlogutils/deltas.pyt<lambda>�tiitreverseN(R�RvRRt_deltabothparentstsortR�R�R8R�R(RxR�tminR�tupdateRR RtkeysR�titemsR_R�(RRURVR�tgdeltatsparsetcurrtprevR~tptparentsR�t
parents_snapstcandidate_chainstchainR/tst	snapfloortall_revstotherR0t	max_depthtfloortsnapstsiblings((RsB/usr/lib64/python2.7/site-packages/mercurial/revlogutils/deltas.pyR��sp		
+

		
%	

(	t
deltacomputercB@s>eZd�Zd�Zd�Zd�Zd�Zd�ZRS(cC@s
||_dS(N(R(RR((sB/usr/lib64/python2.7/site-packages/mercurial/revlogutils/deltas.pyR!sc		C@s�|j}|ddk	r!|dS|j}|j}|d}|d}t|||||j|j|j|j�}|d<|S(s�Builds a fulltext version of a revision

        revinfo: _revisioninfo instance that contains all needed info
        fh:      file handle to either the .i or the .d revlog file,
                 depending on whether it is inlined or not
        iiN(	tbtextRRR�RmRURVRftnode(	RR}RcR�RR�RdReRi((sB/usr/lib64/python2.7/site-packages/mercurial/revlogutils/deltas.pyt	buildtext$s			

c	C@s�|j}|j||�}|j|�rXtj|j|�t|��}||}n-|j|d|dt�}tj	||�}|S(NRRRS(
RR�t
iscensoredRRYRZRR[R_ttextdiff(	RRrR}RcRtttheaderRetptext((sB/usr/lib64/python2.7/site-packages/mercurial/revlogutils/deltas.pyt_builddeltadiff9s	!
c	C@s*d}|jr�|j\}}|}xF|tkrl||krl|jj|�dkrl|jj|�}q'W||kr�|jd}q�n|dkr�|j|||�}n|j}|j|�\}	}
t|	�t|
�}|j	|�}|j
t|�d�}
||
|j|�}|jr5|}n|}|j
|�\}}|d7}||7}|j}d}|tkr�d}n}|jr|j|�r|j|j�|j|j�}}|||fkr|j|�rt|j|�d�}qnt|||	|
f|||||�S(Nii(RR�RRRR�R�tcompressRRsRRR�t
_chaininfoRvRxRRURVRwRp(RR}RrRcRet	cachebaset	cachedifftcurrentbaseRR�R
R7RsRQtdistt	deltabaseRtR5RuRURV((sB/usr/lib64/python2.7/site-packages/mercurial/revlogutils/deltas.pyt_builddeltainfoGsF				

		%!	c
	C@s�t|j�}|j||�}|jj|�}t|d�t|d�}}}|}	}
d}d}t||||	|
|||�S(Nii(RRR�R�Rp(
RRcR}R�trawtextR
R5R7R�R�RsRuRt((sB/usr/lib64/python2.7/site-packages/mercurial/revlogutils/deltas.pyt_fullsnapshotinfoss&
	cC@s�|js|j||�S|jt@r6|j||�S|j}|j}|j}|j}d}|j	|�|j	|�}}	t
|j|j||	|�}
t|
�}x�|dk	rsg}|dk	r�|j|�nxH|D]@}
|j
||
|�}t|j||�r�|j|�q�q�W|rCt|dd��}n|dk	rd|
j|j�}q�t|
�}q�W|dkr�|j||�}n|S(s�Find an acceptable delta against a candidate revision

        revinfo: information about the revision (instance of _revisioninfo)
        fh:      file handle to either the .i or the .d revlog file,
                 depending on whether it is inlined or not

        Returns the first acceptable candidate revision, as ordered by
        _candidategroups

        If no suitable deltabase is found, we return delta info for a full
        snapshot.
        tkeycS@s|jS(N(R7(tx((sB/usr/lib64/python2.7/site-packages/mercurial/revlogutils/deltas.pyR��R�N(RyR�RfRR�RURVRRRR�R)R9R�R�R�R�Rr(RR}RcR�RURVRR!tp1rtp2rtgroupst
candidaterevstnominateddeltastcandidaterevtcandidatedelta((sB/usr/lib64/python2.7/site-packages/mercurial/revlogutils/deltas.pyt
finddeltainfo�s:
	
				
(RRRR�R�R�R�R�(((sB/usr/lib64/python2.7/site-packages/mercurial/revlogutils/deltas.pyR� s				,	
(%Rt
__future__RR�R:RWR�Rti18nRt	constantsRRt
thirdpartyRR�RRR{tobjectRRR&RRR*R'RmR�R_RpR�R�R�R�R�R�(((sB/usr/lib64/python2.7/site-packages/mercurial/revlogutils/deltas.pyt<module>s4DM�5#	
	[	6		3	u