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: //proc/self/root/lib64/python2.7/site-packages/mercurial/dagparser.pyo
�
1�3\c@@s�ddlmZddlZddlZddlmZddlmZmZddl	m
Z
d�Zee
e
e
e
e
dd	�Zee
e
e
e
e
dd
�ZdS(i(tabsolute_importNi(t_(terrortpycompat(t
stringutilc#@s5|s
dStjtjtj��i�d�d����fd�}tj|���fd���fd���fd������fd�}��}x�|d	kr0x%|tjtj�kr���}q�W|d
krd��gffV���d7���}q�|d
kr����tjtj��\}}t|�}x�tjd|�D]*}d��gffV���d7�qiWq�|dkrQ|dkr���}n||�\}}|g}x2|dkr
|���\}}|j	|�q�Wg|D]}	||	�^q}
d�|
ffV���d7�q�|dkr�|���\}}	||	��q�|dkr�|���\}}��|<d�|ffVq�|dkr�|���\}}d|fVq�|dkrs��}|dkrSd}
��}x#|dkrD|
|7}
��}q"Wd|
fVq-||�\}}
d|
fVq�|dkr�x�|dkr���}q�Wq�|dkr�d���}q�|d	kr�dSd}d}x9|d	kr|dkr||7}|d7}��}q�Wt
jtd�|��q�WdS(s#parses a DAG from a concise textual description; generates events

    "+n" is a linear run of n nodes based on the current default parent
    "." is a single node based on the current default parent
    "$" resets the default parent to -1 (implied at the start);
        otherwise the default parent is always the last node created
    "<p" sets the default parent to the backref p
    "*p" is a fork at parent p, where p is a backref
    "*p1/p2/.../pn" is a merge of parents p1..pn, where the pi are backrefs
    "/p2/.../pn" is a merge of the preceding node and p2..pn
    ":name" defines a label for the preceding node; labels can be redefined
    "@text" emits an annotation event for text
    "!command" emits an action event for the current node
    "!!my command
" is like "!", but to the end of the line
    "#...
" is a comment up to the end of the line

    Whitespace between the above elements is ignored.

    A backref is either
     * a number n, which references the node curr-n, where curr is the current
       node, or
     * the name of a label you placed earlier using ":name", or
     * empty to denote the default parent.

    All string valued-elements are either strictly alphanumeric, or must
    be enclosed in double quotes ("..."), with "" as escape character.

    Generates sequence of

      ('n', (id, [parentids])) for node creation
      ('l', (id, labelname)) for labels on nodes
      ('a', text) for annotations
      ('c', command) for actions (!)
      ('C', command) for line actions (!!)

    Examples
    --------

    Example of a complex graph (output not shown for brevity):

        >>> len(list(parsedag(b"""
        ...
        ... +3         # 3 nodes in linear run
        ... :forkhere  # a label for the last of the 3 nodes from above
        ... +5         # 5 more nodes on one branch
        ... :mergethis # label again
        ... <forkhere  # set default parent to labeled fork node
        ... +10        # 10 more nodes on a parallel branch
        ... @stable    # following nodes will be annotated as "stable"
        ... +5         # 5 nodes in stable
        ... !addfile   # custom command; could trigger new file in next node
        ... +2         # two more nodes
        ... /mergethis # merge last node with labeled node
        ... +4         # 4 more nodes descending from merge node
        ...
        ... """)))
        34

    Empty list:

        >>> list(parsedag(b""))
        []

    A simple linear run:

        >>> list(parsedag(b"+3"))
        [('n', (0, [-1])), ('n', (1, [0])), ('n', (2, [1]))]

    Some non-standard ways to define such runs:

        >>> list(parsedag(b"+1+2"))
        [('n', (0, [-1])), ('n', (1, [0])), ('n', (2, [1]))]

        >>> list(parsedag(b"+1*1*"))
        [('n', (0, [-1])), ('n', (1, [0])), ('n', (2, [1]))]

        >>> list(parsedag(b"*"))
        [('n', (0, [-1]))]

        >>> list(parsedag(b"..."))
        [('n', (0, [-1])), ('n', (1, [0])), ('n', (2, [1]))]

    A fork and a join, using numeric back references:

        >>> list(parsedag(b"+2*2*/2"))
        [('n', (0, [-1])), ('n', (1, [0])), ('n', (2, [0])), ('n', (3, [2, 1]))]

        >>> list(parsedag(b"+2<2+1/2"))
        [('n', (0, [-1])), ('n', (1, [0])), ('n', (2, [0])), ('n', (3, [2, 1]))]

    Placing a label:

        >>> list(parsedag(b"+1 :mylabel +1"))
        [('n', (0, [-1])), ('l', (0, 'mylabel')), ('n', (1, [0]))]

    An empty label (silly, really):

        >>> list(parsedag(b"+1:+1"))
        [('n', (0, [-1])), ('l', (0, '')), ('n', (1, [0]))]

    Fork and join, but with labels instead of numeric back references:

        >>> list(parsedag(b"+1:f +1:p2 *f */p2"))
        [('n', (0, [-1])), ('l', (0, 'f')), ('n', (1, [0])), ('l', (1, 'p2')),
         ('n', (2, [0])), ('n', (3, [2, 1]))]

        >>> list(parsedag(b"+1:f +1:p2 <f +1 /p2"))
        [('n', (0, [-1])), ('l', (0, 'f')), ('n', (1, [0])), ('l', (1, 'p2')),
         ('n', (2, [0])), ('n', (3, [2, 1]))]

    Restarting from the root:

        >>> list(parsedag(b"+1 $ +1"))
        [('n', (0, [-1])), ('n', (1, [-1]))]

    Annotations, which are meant to introduce sticky state for subsequent nodes:

        >>> list(parsedag(b"+1 @ann +1"))
        [('n', (0, [-1])), ('a', 'ann'), ('n', (1, [0]))]

        >>> list(parsedag(b'+1 @"my annotation" +1'))
        [('n', (0, [-1])), ('a', 'my annotation'), ('n', (1, [0]))]

    Commands, which are meant to operate on the most recently created node:

        >>> list(parsedag(b"+1 !cmd +1"))
        [('n', (0, [-1])), ('c', 'cmd'), ('n', (1, [0]))]

        >>> list(parsedag(b'+1 !"my command" +1'))
        [('n', (0, [-1])), ('c', 'my command'), ('n', (1, [0]))]

        >>> list(parsedag(b'+1 !!my command line\n +1'))
        [('n', (0, [-1])), ('C', 'my command line'), ('n', (1, [0]))]

    Comments, which extend to the end of the line:

        >>> list(parsedag(b'+1 # comment\n+1'))
        [('n', (0, [-1])), ('n', (1, [0]))]

    Error:

        >>> try: list(parsedag(b'+1 bad'))
        ... except Exception as e: print(pycompat.sysstr(bytes(e)))
        invalid character in dag description: bad...

    Ni����ic@s@|s
�S|dtjtj�kr4�t|�S�|SdS(Ni(Rtbytestrtstringtdigitstint(tref(tlabelstp1tr(s9/usr/lib64/python2.7/site-packages/mercurial/dagparser.pytresolve�s
c@s
t�d�S(Ns(tnext((tchiter(s9/usr/lib64/python2.7/site-packages/mercurial/dagparser.pytnextch�sc@s6d}x#||kr+||7}��}q	W||fS(Nt((tctallowts(R(s9/usr/lib64/python2.7/site-packages/mercurial/dagparser.pytnextrun�s


c@sQd}x;||krC||kr-��}n||7}��}q	W��|fS(NR((RtlimittescapeR(R(s9/usr/lib64/python2.7/site-packages/mercurial/dagparser.pyt
nextdelimited�s

c@s0|dkr���dd�S�|��SdS(Nt"s\((R(RRRt	wordchars(s9/usr/lib64/python2.7/site-packages/mercurial/dagparser.pyt
nextstring�sst.tnit+s*/t*t/t<t:tlt@tat!Rs

tCRt#t$i
s+invalid character in dag description: %s...(
RRRt
ascii_lettersRtiterbytestrt
whitespaceRtxrangetappendRtAbortR(tdescR
RRtdigsRtitpreftprefsR	tpstnamettexttcmdR((RR
RRRRRRs9/usr/lib64/python2.7/site-packages/mercurial/dagparser.pytparsedags��		

$	

		




iFc#@s�d���������fd�}d}	x�|�D]�}
|
dkrc|	r�|	Vd}	q�q:t|	�t|
�|kr�|	Vd}	n%|r�|	r�|
dkr�|	d7}	n|	|
7}	q:W|	r�|	VndS(s$generates single lines for dagtext()cS@s:tjd|�r|Sd|jdd�jdd�dS(Ns^[0-9a-z]*$Rs\s\\(tretmatchtreplace(R7((s9/usr/lib64/python2.7/site-packages/mercurial/dagparser.pyt
wrapstring#sc
3@sLi}d}d}t}x�D]\}}|dkr|\}}||krqtjtd�||f��n|s�dg}n?x<|D]4}||kr�tjtd�||f��q�q�W|d7}|d}	t|�dkr;|ddkr;|r2|rd|Vd}n�r$dVnd	Vd}	q;t}nt|�dkrx|d|	krx�rkd
Vq|d7}q2|r�d|Vd}n�r�dVng}
x_|D]W}||	kr�|
jd�q�||kr�|
j||�q�|
jd||�q�Wd
dj|
�Vq|r3d|Vd}n|dkro|\}}|||<d|V�r2dVq2q|dkr�d�|�V�r2dVq2q|dkr�d|VdVq|dkr��r�dVnd�|�Vq|dkrd|VdVqtjtd�tj	|�tj	|�f��qW|rHd|VndS(NiRsexpected id %i, got %ii����s)parent id %i is larger than current id %iis+%ds
R)RRs%dRR R#R"RR&R's!!R%R$R(s'invalid event type in dag: ('%s', '%s')(
tFalseRR/RtlentTrueR.tjoinRt	escapestr(
R
truntwantrtneedroottkindtdataRR5tpRR4tridR6(teventstusedotstwrapannotationstwrapcommandst
wraplabelst
wrapnonlinearR=(s9/usr/lib64/python2.7/site-packages/mercurial/dagparser.pytgen(s�"


"				"
		
		
			Rs
Rt N(R?(RJt	addspacesRNRLRMRORKtmaxlinewidthRPtlinetpart((RJRKRLRMRNROR=s9/usr/lib64/python2.7/site-packages/mercurial/dagparser.pytdagtextliness 
	!V	
c
C@s(djt||||||||��S(s�generates lines of a textual representation for a dag event stream

    events should generate what parsedag() does, so:

      ('n', (id, [parentids])) for node creation
      ('l', (id, labelname)) for labels on nodes
      ('a', text) for annotations
      ('c', text) for commands
      ('C', text) for line commands ('!!')
      ('#', text) for comment lines

    Parent nodes must come before child nodes.

    Examples
    --------

    Linear run:

        >>> dagtext([(b'n', (0, [-1])), (b'n', (1, [0]))])
        '+2'

    Two roots:

        >>> dagtext([(b'n', (0, [-1])), (b'n', (1, [-1]))])
        '+1 $ +1'

    Fork and join:

        >>> dagtext([(b'n', (0, [-1])), (b'n', (1, [0])), (b'n', (2, [0])),
        ...          (b'n', (3, [2, 1]))])
        '+2 *2 */2'

    Fork and join with labels:

        >>> dagtext([(b'n', (0, [-1])), (b'l', (0, b'f')), (b'n', (1, [0])),
        ...          (b'l', (1, b'p2')), (b'n', (2, [0])), (b'n', (3, [2, 1]))])
        '+1 :f +1 :p2 *f */p2'

    Annotations:

        >>> dagtext([(b'n', (0, [-1])), (b'a', b'ann'), (b'n', (1, [0]))])
        '+1 @ann +1'

        >>> dagtext([(b'n', (0, [-1])),
        ...          (b'a', b'my annotation'),
        ...          (b'n', (1, [0]))])
        '+1 @"my annotation" +1'

    Commands:

        >>> dagtext([(b'n', (0, [-1])), (b'c', b'cmd'), (b'n', (1, [0]))])
        '+1 !cmd +1'

        >>> dagtext([(b'n', (0, [-1])),
        ...          (b'c', b'my command'),
        ...          (b'n', (1, [0]))])
        '+1 !"my command" +1'

        >>> dagtext([(b'n', (0, [-1])),
        ...          (b'C', b'my command line'),
        ...          (b'n', (1, [0]))])
        '+1 !!my command line\n+1'

    Comments:

        >>> dagtext([(b'n', (0, [-1])), (b'#', b' comment'), (b'n', (1, [0]))])
        '+1 # comment\n+1'

        >>> dagtext([])
        ''

    Combining parsedag and dagtext:

        >>> dagtext(parsedag(b'+1 :f +1 :p2 *f */p2'))
        '+1 :f +1 :p2 *f */p2'

    s
(RARV(tdagRRRNRLRMRORKRS((s9/usr/lib64/python2.7/site-packages/mercurial/dagparser.pytdagtext�sU(t
__future__RR:Rti18nRRRRtutilsRR9R@R>RVRX(((s9/usr/lib64/python2.7/site-packages/mercurial/dagparser.pyt<module>s*	�o