
    	^c                     R   d dl Z d dlZddlmZ ddlmZ ddlmZmZmZm	Z	 ddl
mZmZ  G d dej                  Z G d	 d
ej                  Z G d d          Z G d d          Z G d de          Z G d de          Z G d dee          Z G d de          Z G d dee          Z G d de          Z G d de          Z G d de          Z G d d e          Z G d! d"ee          Z G d# d$e          Z G d% d&e          ZdRd)ZdSd*Z	 	 	 	 	 dTd,Z 	 	 	 	 dUd-Z!d. Z"d/ Z#	 dVd0Z$d1 Z%d2 Z&d3 Z'd4 Z(d5 Z)d6 Z*d7 Z+d8 Z,d9 Z-d: Z.d; Z/dWd<Z0dWd=Z1dWd>Z2dWd?Z3d@ Z4dA Z5de.e6e&ee1e7e3iZ8dB Z9dC Z:dD Z;dE Z<dXdGZ=dH Z>dI Z?dJ Z@dK ZAdL ZBdM ZCdN ZDdO ZEdP ZFdQ ZGdS )Y    N   )_)getattr)errorpycompatsmartsetutil)dateutil
stringutilc                       e Zd ZdS )ResourceUnavailableN__name__
__module____qualname__     8/usr/lib/python3/dist-packages/mercurial/templateutil.pyr   r              Dr   r   c                       e Zd ZdS )TemplateNotFoundNr   r   r   r   r   r      r   r   r   c                   `   e Zd ZdZej        Zej        d             Zej        d             Z	ej        d             Z
ej        d             Zej        d             Zej        d             Zej        d             Zej        d	             Zej        d
             Zej        d             ZdS )wrappedzObject requiring extra conversion prior to displaying or processing
    as value

    Use unwrapvalue() or unwrapastype() to obtain the inner object.
    c                     dS )zbTest if the specified item is in self

        The item argument may be a wrapped object.
        Nr   selfcontextmappingitems       r   containszwrapped.contains+         r   c                     dS )zReturn a member item for the specified key

        The key argument may be a wrapped object.
        A returned object may be either a wrapped object or a pure value
        depending on the self type.
        Nr   r   r   r   keys       r   	getmemberzwrapped.getmember2   r!   r   c                     dS )zjReturn the smallest item, which may be either a wrapped or a pure
        value depending on the self typeNr   r   r   r   s      r   getminzwrapped.getmin;   r!   r   c                     dS )ziReturn the largest item, which may be either a wrapped or a pure
        value depending on the self typeNr   r'   s      r   getmaxzwrapped.getmax@   r!   r   c                     dS )zReturn new container of the same type which includes only the
        selected elements

        select() takes each item as a wrapped object and returns True/False.
        Nr   r   r   r   selects       r   filterzwrapped.filterE   r!   r   c                     dS )zYield each template mappingNr   r   r   s     r   itermapszwrapped.itermapsM   r!   r   c                     dS )zJoin items with the separator; Returns a bytes or (possibly nested)
        generator of bytes

        A pre-configured template may be rendered per item if this container
        holds unprintable items.
        Nr   r   r   r   seps       r   joinzwrapped.joinQ   r!   r   c                     dS )zReturn a bytes or (possibly nested) generator of bytes representing
        the underlying object

        A pre-configured template may be rendered if the underlying object is
        not printable.
        Nr   r'   s      r   showzwrapped.showZ   r!   r   c                     dS )z2Return a boolean representation of the inner valueNr   r'   s      r   toboolzwrapped.toboolc   r!   r   c                     dS )zMove the inner value object out or create a value representation

        A returned value must be serializable by templaterfilters.json().
        Nr   r'   s      r   tovaluezwrapped.tovalueg   r!   r   N)r   r   r   __doc__abcABCMeta__metaclass__abstractmethodr    r%   r(   r*   r.   r1   r5   r7   r9   r;   r   r   r   r   r   "   s^         KM   	   	, , , 	, , , 	   	* * * 	   	   	A A A 	    r   r   c                   F    e Zd ZdZej        Zd Zej        d             Z	dS )mappablez:Object which can be converted to a single template mappingc              #   8   K   |                      |          V  d S N)tomapr0   s     r   r1   zmappable.itermapst   s$      jj!!!!!!!r   c                     dS )z2Create a single template mapping representing thisNr   r0   s     r   rE   zmappable.tomapw   r!   r   N)
r   r   r   r<   r=   r>   r?   r1   r@   rE   r   r   r   rB   rB   o   sT        DDKM" " " 	A A A A Ar   rB   c                   Z    e 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 Zd ZdS )wrappedbyteszWrapper for byte stringc                     || _         d S rD   _valuer   values     r   __init__zwrappedbytes.__init__       r   c                 6    t          |||          }|| j        v S rD   )	stringifyrK   r   s       r   r    zwrappedbytes.contains   s     '400t{""r   c                 x    t          j        t          d          t          j        | j                  z            Ns   %r is not a dictionaryr   
ParseErrorr   r   bytestrrK   r#   s       r   r%   zwrappedbytes.getmember   s5    '((8+;DK+H+HH
 
 	
r   c                 :    |                      ||t                    S rD   _getbyminr'   s      r   r(   zwrappedbytes.getmin       {{7GS111r   c                 :    |                      ||t                    S rD   rY   maxr'   s      r   r*   zwrappedbytes.getmax   r[   r   c                     | j         s!t          j        t          d                     |t	          j        | j                             S )Ns   empty string)rK   r   rU   r   r   iterbytestr)r   r   r   funcs       r   rY   zwrappedbytes._getby   sB    { 	7"1_#5#5666tH(55666r   c                 x    t          j        t          d          t          j        | j                  z            )Ns   %r is not filterablerT   r,   s       r   r.   zwrappedbytes.filter   s5    %&&)9$+)F)FF
 
 	
r   c                 x    t          j        t          d          t          j        | j                  z            Ns   %r is not iterable of mappingsrT   r0   s     r   r1   zwrappedbytes.itermaps   s5    /0083CDK3P3PP
 
 	
r   c                 P    t          t          j        | j                  |          S rD   )	joinitemsr   r`   rK   r3   s       r   r5   zwrappedbytes.join   s    -dk::C@@@r   c                     | j         S rD   rJ   r'   s      r   r7   zwrappedbytes.show   
    {r   c                 *    t          | j                  S rD   )boolrK   r'   s      r   r9   zwrappedbytes.tobool   s    DK   r   c                     | j         S rD   rJ   r'   s      r   r;   zwrappedbytes.tovalue   rh   r   N)r   r   r   r<   rN   r    r%   r(   r*   rY   r.   r1   r5   r7   r9   r;   r   r   r   rH   rH   |   s        !!  # # #
 
 

2 2 22 2 27 7 7

 
 


 
 

A A A  ! ! !    r   rH   c                   T    e 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 ZdS )wrappedvaluez2Generic wrapper for pure non-list/dict/bytes valuec                     || _         d S rD   rJ   rL   s     r   rN   zwrappedvalue.__init__   rO   r   c                 T    t          j        t          d          | j        z            Ns   %r is not iterabler   rU   r   rK   r   s       r   r    zwrappedvalue.contains   #    q!677$+EFFFr   c                 T    t          j        t          d          | j        z            rS   rq   r#   s       r   r%   zwrappedvalue.getmember   s#    q!:;;dkIJJJr   c                 T    t          j        t          d          | j        z            rp   rq   r'   s      r   r(   zwrappedvalue.getmin   rr   r   c                 T    t          j        t          d          | j        z            rp   rq   r'   s      r   r*   zwrappedvalue.getmax   rr   r   c                 T    t          j        t          d          | j        z            rp   rq   r,   s       r   r.   zwrappedvalue.filter   rr   r   c                 T    t          j        t          d          | j        z            rd   rq   r0   s     r   r1   zwrappedvalue.itermaps   s*    /004;>
 
 	
r   c                 T    t          j        t          d          | j        z            rp   rq   r3   s       r   r5   zwrappedvalue.join   rr   r   c                 F    | j         dS t          j        | j                   S Nr   )rK   r   rV   r'   s      r   r7   zwrappedvalue.show   s"    ;3,,,r   c                     | j         dS t          | j         t                    r| j         S t          t          j        | j                             S )NF)rK   
isinstancerj   r   rV   r'   s      r   r9   zwrappedvalue.tobool   sF    ;5dk4(( 	;H$T[11222r   c                     | j         S rD   rJ   r'   s      r   r;   zwrappedvalue.tovalue   rh   r   N)r   r   r   r<   rN   r    r%   r(   r*   r.   r1   r5   r7   r9   r;   r   r   r   rm   rm      s        <<  G G GK K KG G GG G GG G G
 
 

G G G- - -
3 3 3    r   rm   c                   V    e 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S )datezWrapper for date tuple   %d %dc                 X    t          t          |          \  | _        | _        || _        d S rD   )mapint	_unixtime	_tzoffset_showfmt)r   rM   showfmts      r   rN   zdate.__init__   s%     *-S%&r   c                 D    t          j        t          d                    Ns   date is not iterabler   rU   r   r   s       r   r    zdate.contains       q!899:::r   c                 D    t          j        t          d                    )Ns   date is not a dictionaryr   r#   s       r   r%   zdate.getmember   s    q!<==>>>r   c                 D    t          j        t          d                    r   r   r'   s      r   r(   zdate.getmin   r   r   c                 D    t          j        t          d                    r   r   r'   s      r   r*   zdate.getmax   r   r   c                 D    t          j        t          d                    r   r   r,   s       r   r.   zdate.filter   r   r   c                 D    t          j        t          d                    r   r   r3   s       r   r5   z	date.join   r   r   c                 .    | j         | j        | j        fz  S rD   )r   r   r   r'   s      r   r7   z	date.show   s    }???r   c                      | j         | j        dS )N)s   unixtimes   tzoffsetr   r   r0   s     r   rE   z
date.tomap   s    !^$.IIIr   c                     dS NTr   r'   s      r   r9   zdate.tobool   s    tr   c                     | j         | j        fS rD   r   r'   s      r   r;   zdate.tovalue   s    //r   N)r   )r   r   r   r<   rN   r    r%   r(   r*   r.   r5   r7   rE   r9   r;   r   r   r   r   r      s                 ; ; ;? ? ?; ; ;; ; ;; ; ;; ; ;@ @ @J J J  0 0 0 0 0r   r   c                   b    e 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S )hybrida  Wrapper for list or dict to support legacy template

    This class allows us to handle both:
    - "{files}" (legacy command-line-specific list hack) and
    - "{files % '{file}
'}" (hgweb-style with inlining and function support)
    and to access raw values:
    - "{ifcontains(file, files, ...)}", "{ifcontains(key, extras, ...)}"
    - "{get(extras, key)}"
    - "{files|json}"
    Nc                 L    || _         || _        || _        || _        || _        d S rD   )_gen_values_makemap_joinfmt_keytype)r   genvaluesmakemapjoinfmtkeytypes         r   rN   zhybrid.__init__  s)    	r   c                 B    t          |||| j                  }|| j        v S rD   )unwrapastyper   r   r   s       r   r    zhybrid.contains  s$    GWdDMBBt|##r   c                    t          j        | j        d          s!t          j        t          d                    t          |||| j                  }|                     || j        	                    |                    S )N   get   not a dictionary)
r	   safehasattrr   r   rU   r   r   r   
_wrapvaluegetr#   s       r   r%   zhybrid.getmember  sl    f55 	;"1%8#9#9:::7GS$-@@sDL$4$4S$9$9:::r   c                 :    |                      ||t                    S rD   rX   r'   s      r   r(   zhybrid.getmin!  r[   r   c                 :    |                      ||t                    S rD   r]   r'   s      r   r*   zhybrid.getmax$  r[   r   c                     | j         s!t          j        t          d                     || j                   }|                     ||          S Ns   empty sequence)r   r   rU   r   r   )r   r   r   ra   vals        r   rY   zhybrid._getby'  sK    | 	9"1%6#7#7888d4<  sC(((r   c                 f    |d S t          j        |d          r|S t          d ||| j                  S )Ns   _makemap)r	   r   
hybriditemr   )r   r$   r   s      r   r   zhybrid._wrapvalue-  s<    ;FC-- 	J$S$-888r   c                      t          j         j        d          r' fd j                                        D             }n fd j        D             }t	          d | j         j         j                  S )Nr   c                 Z    i | ]'\  }}                      ||                    $||(S r   r   ).0kvr-   r   s      r   
<dictcomp>z!hybrid.filter.<locals>.<dictcomp>7  sM       Aq6$//!Q//001  r   c                 R    g | ]#}                      ||                    !|$S r   r   )r   r   r-   r   s     r   
<listcomp>z!hybrid.filter.<locals>.<listcomp>=  s6    OOOA18M8M1N1NOaOOOr   )r	   r   r   itemsr   r   r   r   )r   r   r   r-   r   s   `  ` r   r.   zhybrid.filter5  s    DL&11 	P     L..00  FF POOOOOOOFdFDM4=$-PPPr   c              #   F   K   | j         }| j        D ]} ||          V  d S rD   )r   r   )r   r   r   xs       r   r1   zhybrid.itermaps@  s?      - 	 	A'!**	 	r   c                 F     t           fd j        D             |          S )Nc              3   B   K   | ]}                     |          V  d S rD   )r   )r   r   r   s     r   	<genexpr>zhybrid.join.<locals>.<genexpr>G  s/      AAq$--**AAAAAAr   )rf   r   r3   s   `   r   r5   zhybrid.joinE  s*    AAAADLAAA3GGGr   c                 x    | j         }||                     ||d          S t          |          r
 |            S |S N    )r   r5   callabler   r   r   r   s       r   r7   zhybrid.showI  sB    i;99Wgt444C== 	355L
r   c                 *    t          | j                  S rD   )rj   r   r'   s      r   r9   zhybrid.toboolR  s    DL!!!r   c                     | j         }t          j        |d          r!fd|                                D             S fd|D             S )Nr   c                 :    i | ]\  }}|t          |          S r   unwrapvalue)r   r   r   r   r   s      r   r   z"hybrid.tovalue.<locals>.<dictcomp>Y  s+    OOODAqA{7GQ77OOOr   c                 2    g | ]}t          |          S r   r   r   r   r   r   s     r   r   z"hybrid.tovalue.<locals>.<listcomp>Z  s%    ===QGWa00===r   )r   r	   r   r   )r   r   r   xss    `` r   r;   zhybrid.tovalueU  sc    \B'' 	POOOOOBHHJJOOOO====="====r   rD   )r   r   r   r<   rN   r    r%   r(   r*   rY   r   r.   r1   r5   r7   r9   r;   r   r   r   r   r     s        	 	       $ $ $; ; ;2 2 22 2 2) ) )9 9 9	Q 	Q 	Q  
H H H  " " "> > > > >r   r   c                   T    e 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 ZdS )r   zWrapper for non-list/dict object to support map operation

    This class allows us to handle both:
    - "{manifest}"
    - "{manifest % '{rev}:{node}'}"
    - "{manifest.rev}"
    c                 >    || _         || _        || _        || _        d S rD   )r   _keyrK   r   )r   r   r$   rM   r   s        r   rN   zhybriditem.__init__f  s"    		r   c                 6    |                      | j                  S rD   )r   r   r0   s     r   rE   zhybriditem.tomapl  s    }}TY'''r   c                 \    t          ||| j                  }|                    |||          S rD   )makewrappedrK   r    )r   r   r   r   ws        r   r    zhybriditem.containso  s+    $+66zz'7D111r   c                 \    t          ||| j                  }|                    |||          S rD   )r   rK   r%   )r   r   r   r$   r   s        r   r%   zhybriditem.getmembers  s+    $+66{{7GS111r   c                 Z    t          ||| j                  }|                    ||          S rD   )r   rK   r(   r   r   r   r   s       r   r(   zhybriditem.getminw  )    $+66xx)))r   c                 Z    t          ||| j                  }|                    ||          S rD   )r   rK   r*   r   s       r   r*   zhybriditem.getmax{  r   r   c                 \    t          ||| j                  }|                    |||          S rD   )r   rK   r.   )r   r   r   r-   r   s        r   r.   zhybriditem.filter  s+    $+66xx&111r   c                 \    t          ||| j                  }|                    |||          S rD   )r   rK   r5   )r   r   r   r4   r   s        r   r5   zhybriditem.join  s+    $+66vvgw,,,r   c                 |    | j         }|t          j        | j                  S t	          |          r
 |            S |S rD   )r   r   rV   rK   r   r   s       r   r7   zhybriditem.show  s?    i;#DK000C== 	355L
r   c                 Z    t          ||| j                  }|                    ||          S rD   )r   rK   r9   r   s       r   r9   zhybriditem.tobool  r   r   c                 .    t          ||| j                  S rD   )_unthunkrK   r'   s      r   r;   zhybriditem.tovalue  s    $+666r   N)r   r   r   r<   rN   rE   r    r%   r(   r*   r.   r5   r7   r9   r;   r   r   r   r   r   ]  s              ( ( (2 2 22 2 2* * ** * *2 2 2- - -  * * *7 7 7 7 7r   r   c                   b    e 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S )revslistaZ  Wrapper for a smartset (a list/set of revision numbers)

    If name specified, the revs will be rendered with the old-style list
    template of the given name by default.

    The cachekey provides a hint to cache further computation on this
    smartset. If the underlying smartset is dynamically created, the cachekey
    should be None.
    Nc                 v    t          |t          j                  sJ || _        || _        || _        || _        d S rD   )r|   r   abstractsmartset_repo_revs_namecachekey)r   reporevsnamer   s        r   rN   zrevslist.__init__  s;    $ 9:::::


 r   c                 6    t          |||          }|| j        v S rD   )unwrapintegerr   )r   r   r   r   revs        r   r    zrevslist.contains  s     GWd33dj  r   c                 D    t          j        t          d                    Nr   r   r#   s       r   r%   zrevslist.getmember      q!455666r   c                 n    |                                  } || j                                                  S rD   )_makehybriditemfuncr   rZ   r   r   r   makehybriditems       r   r(   zrevslist.getmin  /    1133~djnn..///r   c                 n    |                                  } || j                                                  S rD   )r   r   r^   r   s       r   r*   zrevslist.getmax  r   r   c                     |                                  | j                            fd          }t          | j        |d           S )Nc                 ,      |                     S rD   r   )rr   r-   s    r   <lambda>z!revslist.filter.<locals>.<lambda>  s    FF>>!3D3D,E,E r   )r   )r   r   r.   r   r   )r   r   r   r-   frevsr   s      ` @r   r.   zrevslist.filter  sN    1133
!!"E"E"E"E"EFF
E5555r   c              #   `   K   |                                  }| j        D ]} ||          V  d S rD   )_makemapfuncr   )r   r   r   r   s       r   r1   zrevslist.itermaps  sI      ##%% 	 	A'!**	 	r   c                 6    |                                  fdS )Nc                 (    t          d | |           S rD   )r   )r   r   s    r   r   z.revslist._makehybriditemfunc.<locals>.<lambda>  s    D!Q88 r   )r   )r   r   s    @r   r   zrevslist._makehybriditemfunc  s#    ##%%88888r   c                 <    | j         | j        rfdS fdS )Nc                     | d|          iS Ns   ctxr   )r   r   r   s    r   r   z'revslist._makemapfunc.<locals>.<lambda>  s    dAvtAw7 r   c                     d|          iS r  r   )r   r   s    r   r   z'revslist._makemapfunc.<locals>.<lambda>  s    fd1g. r   )r   r   )r   r   r   s    @@r   r   zrevslist._makemapfunc  s;    zz 	/777777.....r   c                 ,    t          | j        |          S rD   )rf   r   r3   s       r   r5   zrevslist.join  s    S)))r   c                     | j         r(d | j        D             }t          ||| j         |          S |                     ||d          S )Nc                     g | ]}d |z  S )s   %dr   )r   r   s     r   r   z!revslist.show.<locals>.<listcomp>  s    3331UQY333r   r   )r   r   _showcompatlistr5   )r   r   r   srevss       r   r7   zrevslist.show  sM    : 	533
333E"7GTZGGG99Wgt444r   c                 *    t          | j                  S rD   )rj   r   r'   s      r   r9   zrevslist.tobool  s    DJr   c                     | j         S rD   )r   r'   s      r   r;   zrevslist.tovalue  s
    zr   NN)r   r   r   r<   rN   r    r%   r(   r*   r.   r1   r   r   r5   r7   r9   r;   r   r   r   r   r     s         ! ! ! !! ! !7 7 70 0 00 0 06 6 6  
9 9 9/ / /* * *5 5 5         r   r   c                   J    e 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S )_mappingsequencezWrapper for sequence of template mappings

    This represents an inner template structure (i.e. a list of dicts),
    which can also be rendered by the specified named/literal template.

    Template mappings may be nested.
    Nr   c                 `    ||t          j        d          || _        || _        || _        d S )Ns$   name and tmpl are mutually exclusive)r   ProgrammingErrorr   _tmpl_defaultsep)r   r   tmplr4   s       r   rN   z_mappingsequence.__init__  sC     0(7   

r   c                 D    t          j        t          d                    Ns   not comparabler   r   s       r   r    z_mappingsequence.contains      q!233444r   c                 D    t          j        t          d                    r   r   r#   s       r   r%   z_mappingsequence.getmember  r   r   c                 D    t          j        t          d                    r  r   r'   s      r   r(   z_mappingsequence.getmin  r  r   c                 D    t          j        t          d                    r  r   r'   s      r   r*   z_mappingsequence.getmax  r  r   c                 D    t          j        t          d                    )Ns   not filterable without templater   r,   s       r   r.   z_mappingsequence.filter  s    q!CDDEEEr   c                     t          |                                         } j        r fd|D             }n8 j        r fd|D             }n!t	          j        t          d                    t          ||          S )Nc              3   N   K   | ]}                     j        |          V   d S rD   )processr   r   mr   r   s     r   r   z(_mappingsequence.join.<locals>.<genexpr>  s3      II1
A66IIIIIIr   c              3   N   K   | ]}                     j        |          V   d S rD   )expandr  r  s     r   r   z(_mappingsequence.join.<locals>.<genexpr>  s3      HH!tz155HHHHHHr   s    not displayable without template)_iteroverlaymapsr1   r   r  r   rU   r   rf   )r   r   r   r4   mapsiteritemiters   ``    r   r5   z_mappingsequence.join  s    #GWdmmG6L6LMM: 	KIIIIIIIIHHZ 	KHHHHHxHHHHH"1%H#I#IJJJ3'''r   c                 :    |                      ||| j                  S rD   )r5   r  r'   s      r   r7   z_mappingsequence.show  s    yy'4+;<<<r   c                                                      g }|                               D ]M}                    ||          |                    fd|                                D                        N|S )Nc                 B    i | ]\  }}|v	|t          |          S r   r   )r   r   r   r   knownreslms      r   r   z,_mappingsequence.tovalue.<locals>.<dictcomp>  s@       1(( {7B22(((r   )knownresourcekeysr1   
overlaymapappendr   )r   r   r   r   nmr(  r)  s    `   @@r   r;   z_mappingsequence.tovalue  s    ,,..--(( 		 		B##GR00BLL      "

      r   NNr   )r   r   r   r<   rN   r    r%   r(   r*   r.   r5   r7   r;   r   r   r   r  r    s            5 5 57 7 75 5 55 5 5F F F( ( (= = =    r   r  c                   0     e Zd ZdZd fd	Zd Zd Z xZS )	mappinggeneratorzWrapper for generator of template mappings

    The function ``make(context, *args)`` should return a generator of
    mapping dicts.
    r   Nr   c                 x    t          t          |                               |||           || _        || _        d S rD   )superr0  rN   _make_args)r   makeargsr   r  r4   	__class__s         r   rN   zmappinggenerator.__init__'  s8    %%..tT3???



r   c                 (     | j         |g| j        R  S rD   r3  r4  r0   s     r   r1   zmappinggenerator.itermaps,      tz'/DJ////r   c                 F    t          |                     |                    S rD   )	_nonemptyr1   r'   s      r   r9   zmappinggenerator.tobool/  s    w//000r   )r   NNr   r   r   r   r<   rN   r1   r9   __classcell__r7  s   @r   r0  r0     se              
0 0 01 1 1 1 1 1 1r   r0  c                   0     e Zd ZdZd fd	Zd Zd Z xZS )mappinglistz%Wrapper for list of template mappingsNr   c                 j    t          t          |                               |||           || _        d S rD   )r2  rA  rN   	_mappings)r   mappingsr   r  r4   r7  s        r   rN   zmappinglist.__init__6  s0    k4  ))$c:::!r   c                 *    t          | j                  S rD   )iterrC  r0   s     r   r1   zmappinglist.itermaps:      DN###r   c                 *    t          | j                  S rD   )rj   rC  r'   s      r   r9   zmappinglist.tobool=  rG  r   r.  r=  r?  s   @r   rA  rA  3  sa        //" " " " " "$ $ $$ $ $ $ $ $ $r   rA  c                   :     e Zd ZdZd fd	Zd Zd Z fdZ xZS )mappingdictzWrapper for a single template mapping

    This isn't a sequence in a way that the underlying dict won't be iterated
    as a dict, but shares most of the _mappingsequence functions.
    Nc                 h    t          t          |                               ||           || _        d S rD   )r2  rJ  rN   _mapping)r   r   r   r  r7  s       r   rN   zmappingdict.__init__H  s.    k4  ))$555r   c                     | j         S rD   )rL  r0   s     r   rE   zmappingdict.tomapL  s
    }r   c                     dS r   r   r'   s      r   r9   zmappingdict.toboolO  s	     tr   c                 b    t          t          |                               ||          d         S )Nr   )r2  rJ  r;   )r   r   r   r7  s      r   r;   zmappingdict.tovalueU  s(    [$''//AA!DDr   r  )	r   r   r   r<   rN   rE   r9   r;   r>  r?  s   @r   rJ  rJ  A  s                        E E E E E E E E Er   rJ  c                   (     e Zd ZdZ fdZd Z xZS )mappingnonezWrapper for None, but supports map operation

    This represents None of Optional[mappable]. It's similar to
    mapplinglist([]), but the underlying value is not [], but None.
    c                 X    t          t          |                               d            d S rD   )r2  rQ  rN   )r   r7  s    r   rN   zmappingnone.__init__`  s'    k4  ))$/////r   c                      t          g           S rD   )rF  r0   s     r   r1   zmappingnone.itermapsc  s    Bxxr   )r   r   r   r<   rN   r1   r>  r?  s   @r   rQ  rQ  Y  sQ         0 0 0 0 0      r   rQ  c                   x    e Zd ZdZddZd Zd Zd Zd Zd Z	d	 Z
ed
             Zd Zd Zd Zd Zd Zd ZdS )mappedgeneratora  Wrapper for generator of strings which acts as a list

    The function ``make(context, *args)`` should return a generator of
    byte strings, or a generator of (possibly nested) generators of byte
    strings (i.e. a generator for a list of byte strings.)
    r   c                 "    || _         || _        d S rD   r9  )r   r5  r6  s      r   rN   zmappedgenerator.__init__o  s    



r   c                 T    t          |||          }||                     ||          v S rD   )rQ   r;   r   s       r   r    zmappedgenerator.containss  s,    '400t||GW5555r   c                 (     | j         |g| j        R  S rD   r9  r0   s     r   r   zmappedgenerator._genw  r:  r   c                 D    t          j        t          d                    r   r   r#   s       r   r%   zmappedgenerator.getmemberz  r   r   c                 :    |                      ||t                    S rD   rX   r'   s      r   r(   zmappedgenerator.getmin}  r[   r   c                 :    |                      ||t                    S rD   r]   r'   s      r   r*   zmappedgenerator.getmax  r[   r   c                     |                      ||          }|s!t          j        t          d                     ||          S r   )r;   r   rU   r   )r   r   r   ra   r   s        r   rY   zmappedgenerator._getby  sD    \\'7++ 	9"1%6#7#7888tBxxr   c              #   |   K    || g|R  D ]/}t          | ||          } |t          |                    r|V  0d S rD   )rQ   rH   )r   r   r5  r6  r-   r   ss          r   _filteredgenzmappedgenerator._filteredgen  sd      g%%%% 	 	A'7A..Avl1oo&& 	 	r   c                 L    || j         | j        |f}t          | j        |          S rD   )r3  r4  rU  r_  )r   r   r   r-   r6  s        r   r.   zmappedgenerator.filter  s'    TZ8t0$777r   c                 D    t          j        t          d                    )Ns   list of strings is not mappabler   r0   s     r   r1   zmappedgenerator.itermaps  s    q!CDDEEEr   c                 H    t          |                     |          |          S rD   )rf   r   r3   s       r   r5   zmappedgenerator.join  s    7++S111r   c                 0    |                      ||d          S rz   )r5   r'   s      r   r7   zmappedgenerator.show  s    yy'3///r   c                 F    t          |                     |                    S rD   )r<  r   r'   s      r   r9   zmappedgenerator.tobool  s    7++,,,r   c                 J    fd|                                D             S )Nc                 2    g | ]}t          |          S r   )rQ   r   s     r   r   z+mappedgenerator.tovalue.<locals>.<listcomp>  s%    KKK1	'7A..KKKr   )r   r'   s    ``r   r;   zmappedgenerator.tovalue  s-    KKKKK		'8J8JKKKKr   N)r   )r   r   r   r<   rN   r    r   r%   r(   r*   rY   staticmethodr_  r.   r1   r5   r7   r9   r;   r   r   r   rU  rU  g  s	           6 6 60 0 07 7 72 2 22 2 2     \8 8 8F F F2 2 20 0 0- - -L L L L Lr   rU     key   valuec                 |     t           j        dt           j        t          |  fd fd          S )z>Wrap data to support both dict-like and string-like operationsNs   %s=%sc                     | |          iS rD   r   )r   datar$   rM   s    r   r   zhybriddict.<locals>.<lambda>  s    35$q'* r   c                 B     |            |                    fz  S rD   r   )r   rl  fmtprefmts    r   r   zhybriddict.<locals>.<lambda>  s%    #FF47OO44 r   r   identityrV   r   )rl  r$   rM   rn  r   ro  s   ```` @r   
hybriddictrr    s]    F
{!******444444	  r   c                 r    t           j        dt           j        t          || fdfd          S )z>Wrap data to support both list-like and string-like operationsNs   %sc                     | iS rD   r   )r   r   s    r   r   zhybridlist.<locals>.<lambda>  s    ay r   c                       |           z  S rD   r   )r   rn  ro  s    r   r   zhybridlist.<locals>.<lambda>  s    C&&))O r   rp  )rl  r   rn  r   ro  s    `` @r   
hybridlistrv    sJ    F
{!#t00002K2K2K2K2KLLLr   r   c	                     fd|                                 D             }	t          | |||	||          }
t          |||
          S )zWrap data like hybriddict(), but also supports old-style list template

    This exists for backward compatibility with the old-style template. Use
    hybriddict() for new template keywords.
    c                 "    g | ]\  }}||iS r   r   )r   r   r   r$   rM   s      r   r   zcompatdict.<locals>.<listcomp>  s&    5551#q%	555r   )r$   rM   rn  r   )r   r  rr  )r   r   r   rl  r$   rM   rn  plural	separatorcfs       ``     r   
compatdictr}    sZ      	65555

555A$69EEAd5cqAAAAr   c                 T    t          | |||||          }t          ||p|||          S )zWrap data like hybridlist(), but also supports old-style list template

    This exists for backward compatibility with the old-style template. Use
    hybridlist() for new template keywords.
    )r   rn  r   )r  rv  )	r   r   r   rl  elementrn  ry  rz  r|  s	            r   
compatlistr    s6     	$fiHHAdDcqAAAAr   c                     d D             }t          | |||d          }t          j                  t          |fdfd          S )zWrap list of (dest, source) file names to support old-style list
    template and field names

    This exists for backward compatibility. Use hybriddict for new template
    keywords.
    c                     g | ]
\  }}||d S ))   name   sourcer   )r   r   r   s      r   r   z(compatfilecopiesdict.<locals>.<listcomp>  s$    77711	#	#777r   s   file_copies)ry  c                     | | |          dS )N)r     pathr  r   r   copiess    r   r   z&compatfilecopiesdict.<locals>.<lambda>  s    AfQi@@ r   c                     d| |          fz  S )Ns   %s (%s)r   r  s    r   r   z&compatfilecopiesdict.<locals>.<lambda>  s    *6!9~- r   )r  r	   sortdictr   )r   r   r   r  r{  r|  s      `  r   compatfilecopiesdictr    so     	87777A$.IIIA]6""F	@@@@----	  r   c                 `    t          | |||          }t          ||d t          j                  S )zWrap list of file names to support old-style list template and field
    names

    This exists for backward compatibility. Use hybridlist for new template
    keywords.
    c                     | | dS )N)s   filer  r   )r   s    r   r   z!compatfileslist.<locals>.<lambda>  s    a!44 r   )r  r   r   rq  )r   r   r   filesr|  s        r   compatfileslistr    s9     	$66A	544h6G  r   c              #      K   |sdz   }|s4d|z   }                      |          r                     |          V  dS                                 sbt          |d         t                    r|                    |          V  n-|D ]*}t          |          }|                               |V  +dS d|z   }	                      |	          r                     |	          V  f fd	}
dz   }                      |          r|                                }nd}|D ]} |
|          V  | |
||          V  d	|z   }                      |          r                     |          V  dS dS )
aN  Return a generator that renders old-style list template

    name is name of key in template map.
    values is list of strings or dicts.
    plural is plural of name, if not simply name + 's'.
    separator is used to join values as a string

    expansion works like this, given name 'foo'.

    if values is empty, expand 'no_foos'.

    if 'foo' not in template map, return values as a string,
    joined by 'separator'.

    expand 'start_foos'.

    for each value, expand 'foo'. if 'last_foo' in template
    map, expand it instead of 'foo' for last key.

    expand 'end_foos'.
       ss   no_Nr   s   start_c                    i }	 |                     |            nH# t          t          t          f$ r. 	 | D ]
\  }}|||<   n# t          t          f$ r | |<   Y nw xY wY nw xY w                    |          }                    ||          S rD   )updateAttributeError	TypeError
ValueErrorr+  r  )r   tagvmappingabr   r   r   s        r   onez_showcompatlist.<locals>.one/  s    	#OOA 	:6 	# 	# 	##  $ $DAq"#HQKK$z* # # #!"#	# %%gx88sH---s2    A A A AA AA A s   last_)r  s   end_)preloadr  r|   bytesr5   dictr  pop)r   r   r   r   ry  rz  nonamer   r   	startnamer  lastnamelastendnames   ```           r   r  r    s     0   &??6"" 	3//&'22222??4   fQi'' 	..((((((  GG!!!F"Iy!! 2ooi11111 . . . . . . . ." $Hx   zz||  c!ffc$H%%%%%%Gw 0oogw///////0 0r   c              #   r  K   t          |t                    r|                    | |          }t          |t                    r|V  dS t          |t                    rt          j        d|z            |dS t          j        |d          st          j
        |          V  dS |D ]}t          |t                    r|                    | |          }t          |t                    r|V  G|Jt          j        |d          st          j
        |          V  vt          | ||          D ]}|V  dS )z=Yield a single stream from a possibly nested set of iteratorssH   Mercurial IO including templates is done with bytes, not strings, got %rNs   __iter__)r|   r   r7   r  strr   r  r	   r   r   rV   flatten)r   r   thingijs        r   r  r  N  s{     %!! -

7G,,% 	E3		  $0278
 
 	
 
e[11 u%%%%%%% 	 	A!W%% -FF7G,,!U## %a55 &q)))))) '155  AGGGG	 	r   c                 x    t          |t                    r|S d                    t          | ||                    S )zETurn values into bytes by converting into text and concatenating themr   )r|   r  r5   r  r   r   r  s      r   rQ   rQ   n  s7    % 88GGWe44555r   c                 N    	 | \  }}|t           u r|S |t          u r	|d         } ndS %)z`Find symbolic name for the given compiled expression; returns None
    if nothing found reliablyTr   N)	runsymbol	runfilter)argra   rl  s      r   findsymbolicnamer  u  s@    
d9KYq'CC4r   c                 H    	 t          |            dS # t          $ r Y dS w xY w)NTF)nextStopIteration)xiters    r   r<  r<    s9    Ut   uus    
!!c                 \    t          |t          j                  s|S t          | ||          S )z&Evaluate a lazy byte string into value)r|   typesGeneratorTyperQ   r  s      r   r   r     s.    eU011 Wgu---r   c                 &    |\  }} || ||          S )zEvaluate given argument as a bare template object which may require
    further processing (such as folding generator of strings)r   )r   r   r  ra   rl  s        r   
evalrawexpr    s!     JD$4$'''r   c                 F    t          | ||          }t          | ||          S )z)Evaluate given argument to wrapped object)r  r   )r   r   r  r  s       r   evalwrappedr    s%    w--Ew///r   c                     t          |t                    r|S t          | ||          }t          |t                    rt	          |          S t          |          S )zLift object to a wrapped type)r|   r   r   r  rH   rm   r  s      r   r   r     sX    %!! Wgu--E% #E"""r   c           	      B    t          | |t          | ||                    S )z%Evaluate given argument as value type)r   r  r   r   r  s      r   evalfuncargr    s     wGWc)J)JKKKr   c                 z    t          |t                    r|                    | |          S t          | ||          S )z.Move the inner value object out of the wrapper)r|   r   r;   r   r  s      r   r   r     s<    %!! /}}Wg... GWe,,,r   c                     |\  }}|t           u r& || ||d          }|t          j        |          }n || ||          }t          | ||                              | |          S )zCEvaluate given argument as boolean, but also takes boolean literalsNdefault)r  r   	parseboolr   r9   r   r   r  ra   rl  r  s         r   evalbooleanr    sy    JD$yWgtT:::=(..EWgt,,w//66wHHHr   c                 H    t          | ||          }t          | |||          S )z`Evaluate given argument as a date tuple or a date string; returns
    a (unixtime, offset) tuple)r  
unwrapdater   r   r  errr  s        r   evaldater    s)     w--Egws333r   c                 P   t          |t                    r|                    | |          S t          | ||          }	 t	          j        |          S # t          $ r$ t          j        |pt          d                    t          j        $ r |s t          j        |          w xY w)Ns   not a date tuple nor a string)
r|   r   r;   r   r
   	parsedater  r   rU   r   r   r   r  r  s       r   r  r    s    % /}}Wg...%00E$!%((( K K KsIa(H&I&IJJJ $ $ $ 	s###$s   A AB%c                 H    t          | ||          }t          | |||          S rD   )r  r   r  s        r   evalintegerr    s'    w--E'5#666r   c                     t          | ||          }	 t          |          S # t          t          f$ r$ t	          j        |pt          d                    w xY w)Ns   not an integer)r   r   r  r  r   rU   r   r  s       r   r   r     sc    %00E<5zzz" < < <s:a(9&:&:;;;<s	   " 5Ac           	      B    t          | |t          | ||                    S rD   )rQ   r  r  s      r   
evalstringr    s     Wgz'7C'H'HIIIr   c                 z    |\  }}|t           u r || |||          }n || ||          }t          | ||          S )zXEvaluate given argument as string template, but returns symbol name
    if it is unknownr  )r  rQ   r  s         r   evalstringliteralr    sW     JD$yWgtT:::Wgt,,Wgu---r   c                     	 t           |         }n%# t          $ r t          j        d|z            w xY w || ||          S )zBMove the inner value object out of the wrapper and coerce its types   invalid type specified: %r)_unwrapfuncbytypeKeyErrorr   r  )r   r   r  typr|  s        r   r   r     s^    Jc" J J J$%BS%HIIIJ1Wgu%%%s    "2c                      t          |          S rD   )r   r   r   rl  s      r   
runintegerr    s    t99r   c                     |S rD   r   r  s      r   	runstringr  
  s    Kr   c                       fd}|S )Nc                 L    t          j        t          d          z            )Ns$   recursive reference '%s' in template)r   Abortr   )r   r   r$   s     r   showrecursionz._recursivesymbolblocker.<locals>.showrecursion  s!    k!CDDsJKKKr   r   )r$   r  s   ` r   _recursivesymbolblockerr    s)    L L L L L r   r   c                 0   |                      ||          }|P|                                }t          |          ||<   	 |                     ||          }n# t          $ r |}Y nw xY wt          |          r	  || |          S # t          $ r Y d S w xY w|S rD   )symbolcopyr  r  r   r   r   )r   r   r$   r  r   safemappings         r   r  r    s    w$$Ay llnn2377C	[11AA 	 	 	AAA	{{ 	1Wg&&&" 	 	 	44	 Hs$    A A&%A&9B 
BBc              #   :   K   |D ]}t          | ||          V  d S rD   )r  )r   r   templater  s       r   runtemplater  *  s:       0 0'3//////0 0r   c                    |\  }}t          | ||          }t          |dd           }	 t          | |||          } ||          S # t          j        $ r6}t          j        t          |          t          ||                    d }~ww xY w)N_intypehint)r  r   r   r   rU   r  _formatfiltererror)r   r   rl  r  filtr  intypees           r   r  r  /  s    ICw--ET9d++FMWguf==tE{{ M M MuQxx.@d.K.KLLLLMs   A B1BBc                     t          j        |j                  }t          |           }|st	          d          |z  S t	          d          ||fz  S )Ns(   incompatible use of template filter '%s's8   template filter '%s' is not compatible with keyword '%s')r   sysbytesr   r  r   )r  r  fnsyms       r   r  r  :  s`    		4=	)	)B
3

C C<==BBHII
M  r   c              #   r   K   t          |          D ]$\  }}|                     ||          }||d<   |V  %dS )zuGenerate combined mappings from the original mapping and an iterable
    of partial mappings to override the originals   indexN)	enumerater+  )r   origmappingnewmappingsr  r-  r)  s         r   r"  r"  E  sV       ;''  2R008 r   c              #   B  K   	 |                     |           }n^# t          j        $ rL}t          |          }|s t	          d          |z  }t          j        t          |          |          d }~ww xY wt          | ||          D ]}	t          | |	|          V  d S )Ns+   keyword '%s' does not support map operationr  )r1   r   rU   r  r   r  r"  r  )
r   r   ddargtargditerr  r  r  r)  s
             r   	_applymapr  N  s      6

7## 6 6 6t$$ 	?@@3FuSzz55556 w77 , ,"d++++++, ,s    A5AA00A5c                 b    |\  }}t          | ||          }t          t          ||||f          S )N)r6  )r  rU  r  )r   r   rl  r  r  r  s         r   runmapr  [  s8    JD$GWd++A9GQd+CDDDDr   c                    |\  }}t          | ||          }t          |t                    r:|                     ||                    |                     }t          | ||          S 	 |                    | ||          S # t          j        $ rL}t          |          }|s t          d          |z  }	t          j        t          |          |	          d }~ww xY w)Ns.   keyword '%s' does not support member operationr  )r  r|   rB   r+  rE   r  r%   r   rU   r  r   r  )
r   r   rl  r  membr  r)  r  r  r  s
             r   	runmemberr  a  s    JD$GWd++A!X ,)9)9::"d+++6{{7GT222 6 6 6t$$ 	BCCcIuSzz55556s   'A> >CACCc                 F    t          | ||t          d                    }| S )Ns"   negation needs an integer argument)r  r   r  s      r   	runnegater  q  s,    $"G H H D 5Lr   c                    |\  }}}t          | ||t          d                    }t          | ||t          d                    }	  |||          S # t          $ r" t          j        t          d                    w xY w)Ns#   arithmetic only defined on integerss   division by zero is not defined)r  r   ZeroDivisionErrorr   r  )r   r   rl  ra   leftrights         r   runarithmeticr  x  s    D$$"H I I D %#I!J!J EAtD%    A A Ak!>??@@@As   A ,A>c              #   6   K   d}| D ]}|rd}n|r|V  |V  dS )z9Join items with the separator; Returns generator of bytesTFNr   )r$  r4   firstr   s       r   rf   rf     sO      E   	EE 	III r   )rh  ri  NNr  )rh  ri  NNr   )NNNr   r   rD   )r   )Hr=   r  i18nr   r   r    r   r   r	   utilsr
   r   r  r   r   r   rB   rH   rm   r   r   r   r   r  r0  rA  rJ  rQ  rU  rr  rv  r}  r  r  r  r  r  rQ   r  r<  r   r  r  r   r  r   r  r  r  r  r   r  r  r  r   r  r   r  r  r  r  r  r  r  r"  r  r  r  r  r  rf   r   r   r   <module>r     so   


                               	 	 	 	 	%+ 	 	 		 	 	 	 	u{ 	 	 	J J J J J J J JZ
A 
A 
A 
A 
A 
A 
A 
A. . . . .7 . . .b+ + + + +7 + + +\%0 %0 %0 %0 %08W %0 %0 %0PW> W> W> W> W>W W> W> W>t87 87 87 87 877 87 87 87vF F F F Fw F F FR< < < < <w < < <~1 1 1 1 1' 1 1 1&$ $ $ $ $" $ $ $E E E E E(, E E E0    ,   :L :L :L :L :Lg :L :L :Lz   M M M M 	
B B B B4 B B B B&  &
 
 
 <@H0 H0 H0 H0V  @6 6 6
 
 
  . . .( ( (0 0 0  L L L
- - -
I 
I 
I4 4 4 4$ $ $ $7 7 7 7
< < < <J J J. . . 	+	9*	 & & &         *0 0 0
M M M    
, 
, 
,E E E6 6 6   A A A    r   