
    6hc                       S SK Jr  S SKrS SKrSSKJr  SSKJrJrJ	r	J
r
  SSKJrJr   " S S\R                  5      r " S	 S
\R                  5      r " S S5      r " S S5      r " S S\5      r " S S\5      r " S S\\5      r " S S\5      r " S S\\5      r " S S\5      r " S S\5      r " S S\5      r " S S \5      r " S! S"\\5      r " S# S$\5      r " S% S&\5      rSNS' jrSOS( jr      SPS) jr!    SQS* jr"S+ r#S, r$ SRS- jr%S. r&S/ r'S0 r(S1 r)S2 r*S3 r+S4 r,S5 r-S6 r.S7 r/S8 r0SSS9 jr1SSS: jr2SSS; jr3SSS< jr4S= r5S> r6S\/\7\'\\2\8\40r9S? r:S@ r;SA r<SB r=STSC jr>SD r?SE r@SF rASG rBSH rCSI rDSJ rESK rFSL rGSM rHg)U    )annotationsN   )_)errorpycompatsmartsetutil)dateutil
stringutilc                      \ rS rSrSrg)ResourceUnavailable    N__name__
__module____qualname____firstlineno____static_attributes__r       8/usr/lib/python3/dist-packages/mercurial/templateutil.pyr   r          r   r   c                      \ rS rSrSrg)TemplateNotFound   r   Nr   r   r   r   r   r      r   r   r   c                     \ rS rSrSr\R                  r\R                  S 5       r	\R                  S 5       r
\R                  S 5       r\R                  S 5       r\R                  S 5       r\R                  S 5       r\R                  S	 5       r\R                  S
 5       r\R                  S 5       r\R                  S 5       rSrg)wrapped"   zObject requiring extra conversion prior to displaying or processing
as value

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

The item argument may be a wrapped object.
Nr   selfcontextmappingitems       r   containswrapped.contains+       r   c                    g)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   	getmemberwrapped.getmember2   r'   r   c                    g)zbReturn the smallest item, which may be either a wrapped or a pure
value depending on the self typeNr   r!   r"   r#   s      r   getminwrapped.getmin;   r'   r   c                    g)zaReturn the largest item, which may be either a wrapped or a pure
value depending on the self typeNr   r.   s      r   getmaxwrapped.getmax@   r'   r   c                    g)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   filterwrapped.filterE   r'   r   c                    g)zYield each template mappingNr   r!   r"   s     r   itermapswrapped.itermapsM   r'   r   c                    g)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   joinwrapped.joinQ   r'   r   c                    g)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   showwrapped.showZ   r'   r   c                    g)z2Return a boolean representation of the inner valueNr   r.   s      r   toboolwrapped.toboolc   r'   r   c                    g)zMove the inner value object out or create a value representation

A returned value must be serializable by templaterfilters.json().
Nr   r.   s      r   tovaluewrapped.tovalueg   r'   r   r   N)r   r   r   r   __doc__abcABCMeta__metaclass__abstractmethodr%   r+   r/   r2   r7   r;   r@   rC   rF   rI   r   r   r   r   r   r   "   s    KKM  	  	, , 	, , 	  	* * 	  	  	A A 	 r   r   c                  Z    \ rS rSrSr\R                  rS r\R                  S 5       r
Srg)mappableo   z:Object which can be converted to a single template mappingc              #  2   #    U R                  U5      v   g 7fN)tomapr:   s     r   r;   mappable.itermapst   s     jj!!s   c                    g)z2Create a single template mapping representing thisNr   r:   s     r   rU   mappable.tomapw   r'   r   r   N)r   r   r   r   rK   rL   rM   rN   r;   rO   rU   r   r   r   r   rQ   rQ   o   s/    DKKM" 	A Ar   rQ   c                  `    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rSrg)wrappedbytes|   zWrapper for byte stringc                    Xl         g rT   _valuer!   values     r   __init__wrappedbytes.__init__       r   c                6    [        XU5      nX0R                  ;   $ rT   )	stringifyr^   r    s       r   r%   wrappedbytes.contains   s    40{{""r   c                    [         R                  " [        S5      [        R                  " U R
                  5      -  5      eNs   %r is not a dictionaryr   
ParseErrorr   r   bytestrr^   r)   s       r   r+   wrappedbytes.getmember   s2    '(8+;+;DKK+HH
 	
r   c                .    U R                  X[        5      $ rT   _getbyminr.   s      r   r/   wrappedbytes.getmin       {{7S11r   c                .    U R                  X[        5      $ rT   ro   maxr.   s      r   r2   wrappedbytes.getmax   rr   r   c                    U R                   (       d  [        R                  " [        S5      5      eU" [        R
                  " U R                   5      5      $ )Ns   empty string)r^   r   rj   r   r   iterbytestr)r!   r"   r#   funcs       r   ro   wrappedbytes._getby   s9    {{""1_#566H((566r   c                    [         R                  " [        S5      [        R                  " U R
                  5      -  5      e)Ns   %r is not filterableri   r5   s       r   r7   wrappedbytes.filter   s2    %&)9)9$++)FF
 	
r   c                    [         R                  " [        S5      [        R                  " U R
                  5      -  5      eNs   %r is not iterable of mappingsri   r:   s     r   r;   wrappedbytes.itermaps   s2    /083C3CDKK3PP
 	
r   c                V    [        [        R                  " U R                  5      U5      $ rT   )	joinitemsr   rx   r^   r>   s       r   r@   wrappedbytes.join   s    --dkk:C@@r   c                    U R                   $ rT   r]   r.   s      r   rC   wrappedbytes.show       {{r   c                ,    [        U R                  5      $ rT   )boolr^   r.   s      r   rF   wrappedbytes.tobool   s    DKK  r   c                    U R                   $ rT   r]   r.   s      r   rI   wrappedbytes.tovalue   r   r   r]   N)r   r   r   r   rK   ra   r%   r+   r/   r2   ro   r7   r;   r@   rC   rF   rI   r   r   r   r   rZ   rZ   |   sB    !#

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



A!r   rZ   c                  Z    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rSrg)wrappedvalue   z2Generic wrapper for pure non-list/dict/bytes valuec                    Xl         g rT   r]   r_   s     r   ra   wrappedvalue.__init__   rc   r   c                Z    [         R                  " [        S5      U R                  -  5      eNs   %r is not iterabler   rj   r   r^   r    s       r   r%   wrappedvalue.contains   "    q!67$++EFFr   c                Z    [         R                  " [        S5      U R                  -  5      erh   r   r)   s       r   r+   wrappedvalue.getmember   s"    q!:;dkkIJJr   c                Z    [         R                  " [        S5      U R                  -  5      er   r   r.   s      r   r/   wrappedvalue.getmin   r   r   c                Z    [         R                  " [        S5      U R                  -  5      er   r   r.   s      r   r2   wrappedvalue.getmax   r   r   c                Z    [         R                  " [        S5      U R                  -  5      er   r   r5   s       r   r7   wrappedvalue.filter   r   r   c                Z    [         R                  " [        S5      U R                  -  5      er~   r   r:   s     r   r;   wrappedvalue.itermaps   s'    /04;;>
 	
r   c                Z    [         R                  " [        S5      U R                  -  5      er   r   r>   s       r   r@   wrappedvalue.join   r   r   c                ^    U R                   c  g[        R                  " U R                   5      $ Nr   )r^   r   rk   r.   s      r   rC   wrappedvalue.show   s$    ;;,,r   c                    U R                   c  g[        U R                   [        5      (       a  U R                   $ [        [        R                  " U R                   5      5      $ )NF)r^   
isinstancer   r   rk   r.   s      r   rF   wrappedvalue.tobool   sD    ;;dkk4((;;H$$T[[122r   c                    U R                   $ rT   r]   r.   s      r   rI   wrappedvalue.tovalue   r   r   r]   N)r   r   r   r   rK   ra   r%   r+   r/   r2   r7   r;   r@   rC   rF   rI   r   r   r   r   r   r      sB    <GKGGG

G-
3r   r   c                  ^    \ rS rSrSrSS jrS rS rS rS r	S r
S	 rS
 rS rS rS rSrg)date   zWrapper for date tuplec                J    [        [        U5      u  U l        U l        X l        g rT   )mapint	_unixtime	_tzoffset_showfmt)r!   r`   showfmts      r   ra   date.__init__   s     *-S%&r   c                @    [         R                  " [        S5      5      eNs   date is not iterabler   rj   r   r    s       r   r%   date.contains       q!89::r   c                @    [         R                  " [        S5      5      e)Ns   date is not a dictionaryr   r)   s       r   r+   date.getmember   s    q!<=>>r   c                @    [         R                  " [        S5      5      er   r   r.   s      r   r/   date.getmin   r   r   c                @    [         R                  " [        S5      5      er   r   r.   s      r   r2   date.getmax   r   r   c                @    [         R                  " [        S5      5      er   r   r5   s       r   r7   date.filter   r   r   c                @    [         R                  " [        S5      5      er   r   r>   s       r   r@   	date.join   r   r   c                L    U R                   U R                  U R                  4-  $ rT   )r   r   r   r.   s      r   rC   	date.show   s    }}???r   c                4    U R                   U R                  S.$ )N)s   unixtimes   tzoffsetr   r   r:   s     r   rU   
date.tomap   s    !^^$..IIr   c                    gNTr   r.   s      r   rF   date.tobool   s    r   c                2    U R                   U R                  4$ rT   r   r.   s      r   rI   date.tovalue   s    //r   )r   r   r   N)s   %d %d)r   r   r   r   rK   ra   r%   r+   r/   r2   r7   r@   rC   rU   rF   rI   r   r   r   r   r   r      s>      ;?;;;;@J0r   r   c                  j    \ rS rSrSrSS jrS rS rS rS r	S	 r
S
 rS rS rS rS rS rS rSrg)hybridi  a  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                @    Xl         X l        X0l        X@l        XPl        g rT   )_gen_values_makemap_joinfmt_keytype)r!   genvaluesmakemapjoinfmtkeytypes         r   ra   hybrid.__init__  s    	r   c                J    [        XX0R                  5      nX0R                  ;   $ rT   )unwrapastyper   r   r    s       r   r%   hybrid.contains  s    GdMMB||##r   c                    [        U R                  S5      (       d  [        R                  " [	        S5      5      e[        XX0R                  5      nU R                  X0R                  R                  U5      5      $ )Nget   not a dictionary)	hasattrr   r   rj   r   r   r   
_wrapvaluer   r)   s       r   r+   hybrid.getmember  sX    t||U++""1%8#9::7S--@sLL$4$4S$9::r   c                .    U R                  X[        5      $ rT   rn   r.   s      r   r/   hybrid.getmin!  rr   r   c                .    U R                  X[        5      $ rT   rt   r.   s      r   r2   hybrid.getmax$  rr   r   c                    U R                   (       d  [        R                  " [        S5      5      eU" U R                   5      nU R	                  XD5      $ Ns   empty sequence)r   r   rj   r   r   )r!   r"   r#   ry   vals        r   ro   hybrid._getby'  s=    ||""1%6#7884<< s((r   c                ^    Uc  g [        US5      (       a  U$ [        S XU R                  5      $ )Nr   )r   
hybriditemr   )r!   r*   r   s      r   r   hybrid._wrapvalue-  s/    ;3
##J$$--88r   c           
        [        U R                  S5      (       aM  U R                  R                  5        VVs0 s H%  u  pEU" U R                  XE5      5      (       d  M#  XE_M'     nnnO9U R                   Vs/ s H"  oS" U R                  XU5      5      (       d  M   UPM$     nn[	        S X`R
                  U R                  U R                  5      $ s  snnf s  snf Nr   )r   r   itemsr   r   r   r   r   )r!   r"   r#   r6   kvr   s          r   r7   hybrid.filter5  s    4<<'' !LL..00DA$//!/0 0  F "&OA8M1NaFOdFMM4==$--PP Ps   "CC7CCc              #  ^   #    U R                   nU R                   H  nU" U5      v   M     g 7frT   )r   r   )r!   r"   r   xs       r   r;   hybrid.itermaps@  s&     --A!* s   +-c                D   ^  [        U 4S jT R                   5       U5      $ )Nc              3  F   >#    U  H  nTR                  U5      v   M     g 7frT   )r   ).0r   r!   s     r   	<genexpr>hybrid.join.<locals>.<genexpr>G  s     ALq$--**Ls   !)r   r   r>   s   `   r   r@   hybrid.joinE  s    ADLLA3GGr   c                v    U R                   nUc  U R                  XS5      $ [        U5      (       a  U" 5       $ U$ N    )r   r@   callabler!   r"   r#   r   s       r   rC   hybrid.showI  s6    ii;99Wt44C==5L
r   c                ,    [        U R                  5      $ rT   )r   r   r.   s      r   rF   hybrid.toboolR  s    DLL!!r   c           
         U R                   n[        US5      (       a0  UR                  5        VVs0 s H  u  pEU[        XU5      _M     snn$ U Vs/ s H  n[        XU5      PM     sn$ s  snnf s  snf r   )r   r   r   unwrapvalue)r!   r"   r#   xsr   r   r   s          r   rI   hybrid.tovalueU  sf    \\2uDFHHJOJDAA{7Q77JOO:<="QGa0"== P=s   A+A1)r   r   r   r   r   rT   )r   r   r   r   rK   ra   r%   r+   r/   r2   ro   r   r7   r;   r@   rC   rF   rI   r   r   r   r   r   r     sJ    	 $;22)9	Q
H">r   r   c                  Z    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rSrg)r   i]  zWrapper for non-list/dict object to support map operation

This class allows us to handle both:
- "{manifest}"
- "{manifest % '{rev}:{node}'}"
- "{manifest.rev}"
c                4    Xl         X l        X0l        X@l        g rT   )r   _keyr^   r   )r!   r   r*   r`   r   s        r   ra   hybriditem.__init__f  s    		r   c                8    U R                  U R                  5      $ rT   )r   r  r:   s     r   rU   hybriditem.tomapl  s    }}TYY''r   c                R    [        XU R                  5      nUR                  XU5      $ rT   )makewrappedr^   r%   )r!   r"   r#   r$   ws        r   r%   hybriditem.containso  s#    $++6zz'D11r   c                R    [        XU R                  5      nUR                  XU5      $ rT   )r  r^   r+   )r!   r"   r#   r*   r  s        r   r+   hybriditem.getmembers  s#    $++6{{7S11r   c                P    [        XU R                  5      nUR                  X5      $ rT   )r  r^   r/   r!   r"   r#   r  s       r   r/   hybriditem.getminw  !    $++6xx))r   c                P    [        XU R                  5      nUR                  X5      $ rT   )r  r^   r2   r  s       r   r2   hybriditem.getmax{  r  r   c                R    [        XU R                  5      nUR                  XU5      $ rT   )r  r^   r7   )r!   r"   r#   r6   r  s        r   r7   hybriditem.filter  s#    $++6xx&11r   c                R    [        XU R                  5      nUR                  XU5      $ rT   )r  r^   r@   )r!   r"   r#   r?   r  s        r   r@   hybriditem.join  s#    $++6vvg,,r   c                    U R                   nUc   [        R                  " U R                  5      $ [	        U5      (       a  U" 5       $ U$ rT   )r   r   rk   r^   r  r  s       r   rC   hybriditem.show  s:    ii;##DKK00C==5L
r   c                P    [        XU R                  5      nUR                  X5      $ rT   )r  r^   rF   r  s       r   rF   hybriditem.tobool  r  r   c                .    [        XU R                  5      $ rT   )_unthunkr^   r.   s      r   rI   hybriditem.tovalue  s    $++66r   )r   r  r   r^   N)r   r   r   r   rK   ra   rU   r%   r+   r/   r2   r7   r@   rC   rF   rI   r   r   r   r   r   r   ]  s>     (22**2-*7r   r   c                  j    \ rS rSrSrSS jrS rS rS rS r	S	 r
S
 rS rS rS rS rS rS rSrg)revslisti  aB  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    [        U[        R                  5      (       d   eXl        X l        X0l        X@l        g rT   )r   r   abstractsmartset_repo_revs_namecachekey)r!   reporevsnamer.  s        r   ra   revslist.__init__  s/    $ 9 9::::


 r   c                6    [        XU5      nX@R                  ;   $ rT   )unwrapintegerr,  )r!   r"   r#   r$   revs        r   r%   revslist.contains  s    Gd3jj  r   c                @    [         R                  " [        S5      5      eNr   r   r)   s       r   r+   revslist.getmember      q!4566r   c                b    U R                  5       nU" U R                  R                  5       5      $ rT   )_makehybriditemfuncr,  rp   r!   r"   r#   makehybriditems       r   r/   revslist.getmin  &    113djjnn.//r   c                b    U R                  5       nU" U R                  R                  5       5      $ rT   )r<  r,  ru   r=  s       r   r2   revslist.getmax  r@  r   c                   ^^ U R                  5       mU R                  R                  UU4S j5      n[        U R                  US S9$ )Nc                    > T" T" U 5      5      $ rT   r   )rr>  r6   s    r   <lambda>!revslist.filter.<locals>.<lambda>  s    F>!3D,Er   )r1  )r<  r,  r7   r(  r+  )r!   r"   r#   r6   frevsr>  s      ` @r   r7   revslist.filter  s9    113

!!"EF

E55r   c              #  f   #    U R                  5       nU R                   H  nU" U5      v   M     g 7frT   )_makemapfuncr,  )r!   r"   r   rE  s       r   r;   revslist.itermaps  s+     ##%A!*    /1c                0   ^ U R                  5       mU4S j$ )Nc                   > [        S X T5      $ rT   )r   )rE  r   s    r   rF  .revslist._makehybriditemfunc.<locals>.<lambda>  s    D!8r   )rK  )r!   r   s    @r   r<  revslist._makehybriditemfunc  s    ##%88r   c                ^   ^^ U R                   mU R                  mT(       a  UU4S j$ U4S j$ )Nc                   > TU STU    0$ Ns   ctxr   )rE  r1  r/  s    r   rF  'revslist._makemapfunc.<locals>.<lambda>  s    dAvtAw7r   c                   > STU    0$ rT  r   )rE  r/  s    r   rF  rU    s    fd1g.r   )r+  r-  )r!   r1  r/  s    @@r   rK  revslist._makemapfunc  s$    zzzz77..r   c                .    [        U R                  U5      $ rT   )r   r,  r>   s       r   r@   revslist.join  s    S))r   c                    U R                   (       a6  U R                   Vs/ s H  nSU-  PM
     nn[        XU R                   U5      $ U R                  XS5      $ s  snf )Ns   %dr   )r-  r,  _showcompatlistr@   )r!   r"   r#   rE  srevss        r   rC   revslist.show  sN    ::(,

3
1UQY
E3"7TZZGG99Wt44 4s   Ac                ,    [        U R                  5      $ rT   )r   r,  r.   s      r   rF   revslist.tobool  s    DJJr   c                    U R                   $ rT   )r,  r.   s      r   rI   revslist.tovalue  s    zzr   )r-  r+  r,  r.  NN)r   r   r   r   rK   ra   r%   r+   r/   r2   r7   r;   r<  rK  r@   rC   rF   rI   r   r   r   r   r(  r(    sH    !!7006
9/*5 r   r(  c                  R    \ rS rSrSrSS jrS rS rS rS r	S	 r
S
 rS rS rSrg)_mappingsequencei  zWrapper 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.
Nc                `    Ub  Ub  [         R                  " S5      eXl        X l        X0l        g )Ns$   name and tmpl are mutually exclusive)r   ProgrammingErrorr-  _tmpl_defaultsep)r!   r1  tmplr?   s       r   ra   _mappingsequence.__init__  s5     0((7  

r   c                @    [         R                  " [        S5      5      eNs   not comparabler   r    s       r   r%   _mappingsequence.contains      q!2344r   c                @    [         R                  " [        S5      5      er8  r   r)   s       r   r+   _mappingsequence.getmember  r:  r   c                @    [         R                  " [        S5      5      erl  r   r.   s      r   r/   _mappingsequence.getmin  rn  r   c                @    [         R                  " [        S5      5      erl  r   r.   s      r   r2   _mappingsequence.getmax  rn  r   c                @    [         R                  " [        S5      5      e)Ns   not filterable without templater   r5   s       r   r7   _mappingsequence.filter  s    q!CDEEr   c                  ^ ^ [        TUT R                  T5      5      nT R                  (       a  UU 4S jU 5       nO>T R                  (       a  UU 4S jU 5       nO[        R
                  " [        S5      5      e[        XS5      $ )Nc              3  \   >#    U  H!  nTR                  TR                  U5      v   M#     g 7frT   )processr-  r   mr"   r!   s     r   r   (_mappingsequence.join.<locals>.<genexpr>  s#     I1

A66   ),c              3  \   >#    U  H!  nTR                  TR                  U5      v   M#     g 7frT   )expandrg  rz  s     r   r   r|    s#     Hx!tzz155xr}  s    not displayable without template)_iteroverlaymapsr;   r-  rg  r   rj   r   r   )r!   r"   r#   r?   mapsiteritemiters   ``    r   r@   _mappingsequence.join  s^    #GWdmmG6LM::IIHZZHxHH""1%H#IJJ''r   c                :    U R                  XU R                  5      $ rT   )r@   rh  r.   s      r   rC   _mappingsequence.show  s    yy4+;+;<<r   c                   UR                  5       n/ nU R                  U5       HZ  nUR                  X%5      nUR                  UR	                  5        VVs0 s H  u  pxXs;  d  M  U[        XU5      _M     snn5        M\     U$ s  snnf rT   )knownresourcekeysr;   
overlaymapappendr   r  )	r!   r"   r#   knownresr   nmlmr   r   s	            r   rI   _mappingsequence.tovalue  s    ,,.--(B##G0BLL !#
 *( 3A{722 * ) s   B%B)rh  r-  rg  NNr   )r   r   r   r   rK   ra   r%   r+   r/   r2   r7   r@   rC   rI   r   r   r   r   rd  rd    s5    5755F(=r   rd  c                  <   ^  \ rS rSrSrSU 4S jjrS rS rSrU =r	$ )mappinggeneratori   z~Wrapper for generator of template mappings

The function ``make(context, *args)`` should return a generator of
mapping dicts.
c                >   > [         TU ]  X4U5        Xl        X l        g rT   )superra   _make_args)r!   makeargsr1  ri  r?   	__class__s         r   ra   mappinggenerator.__init__'  s    S)

r   c                <    U R                   " U/U R                  Q76 $ rT   r  r  r:   s     r   r;   mappinggenerator.itermaps,      zz'/DJJ//r   c                6    [        U R                  U5      5      $ rT   )	_nonemptyr;   r.   s      r   rF   mappinggenerator.tobool/  s    w/00r   r  r  )r   NNr   
r   r   r   r   rK   ra   r;   rF   r   __classcell__r  s   @r   r  r     s    
01 1r   r  c                  <   ^  \ rS rSrSrSU 4S jjrS rS rSrU =r	$ )mappinglisti3  z%Wrapper for list of template mappingsc                2   > [         TU ]  X#U5        Xl        g rT   )r  ra   	_mappings)r!   mappingsr1  ri  r?   r  s        r   ra   mappinglist.__init__6  s    S)!r   c                ,    [        U R                  5      $ rT   )iterr  r:   s     r   r;   mappinglist.itermaps:      DNN##r   c                ,    [        U R                  5      $ rT   )r   r  r.   s      r   rF   mappinglist.tobool=  r  r   )r  r  r  r  s   @r   r  r  3  s    /"$$ $r   r  c                  H   ^  \ rS rSrSrSU 4S jjrS rS rU 4S jrSr	U =r
$ )	mappingdictiA  zWrapper 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.
c                0   > [         TU ]  X#5        Xl        g rT   )r  ra   _mapping)r!   r#   r1  ri  r  s       r   ra   mappingdict.__init__H  s    $r   c                    U R                   $ rT   r  r:   s     r   rU   mappingdict.tomapL  s    }}r   c                    gr   r   r.   s      r   rF   mappingdict.toboolO  s     r   c                (   > [         TU ]  X5      S   $ )Nr   )r  rI   )r!   r"   r#   r  s      r   rI   mappingdict.tovalueU  s    ww033r   r  rb  )r   r   r   r   rK   ra   rU   rF   rI   r   r  r  s   @r   r  r  A  s!     4 4r   r  c                  2   ^  \ rS rSrSrU 4S jrS rSrU =r$ )mappingnoneiY  zWrapper 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                $   > [         TU ]  S 5        g rT   )r  ra   )r!   r  s    r   ra   mappingnone.__init__`  s    r   c                    [        / 5      $ rT   )r  r:   s     r   r;   mappingnone.itermapsc  s    Bxr   r   )	r   r   r   r   rK   ra   r;   r   r  r  s   @r   r  r  Y  s     r   r  c                  z    \ rS rSrSrSS jrS rS rS rS r	S r
S	 r\S
 5       rS rS rS rS rS rS rSrg)mappedgeneratorig  zWrapper 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.)
c                    Xl         X l        g rT   r  )r!   r  r  s      r   ra   mappedgenerator.__init__o  s    

r   c                @    [        XU5      nX0R                  X5      ;   $ rT   )re   rI   r    s       r   r%   mappedgenerator.containss  s     40||G555r   c                <    U R                   " U/U R                  Q76 $ rT   r  r:   s     r   r   mappedgenerator._genw  r  r   c                @    [         R                  " [        S5      5      er8  r   r)   s       r   r+   mappedgenerator.getmemberz  r:  r   c                .    U R                  X[        5      $ rT   rn   r.   s      r   r/   mappedgenerator.getmin}  rr   r   c                .    U R                  X[        5      $ rT   rt   r.   s      r   r2   mappedgenerator.getmax  rr   r   c                    U R                  X5      nU(       d  [        R                  " [        S5      5      eU" U5      $ r   )rI   r   rj   r   )r!   r"   r#   ry   r  s        r   ro   mappedgenerator._getby  s3    \\'+""1%6#788Bxr   c              #  |   #    U" U /UQ76  H+  n[        XU5      nU" [        U5      5      (       d  M'  Uv   M-     g 7frT   )re   rZ   )r"   r#   r  r  r6   r   ss          r   _filteredgenmappedgenerator._filteredgen  s9     g%%A'A.Al1o&& &s   -<	<c                `    X R                   U R                  U4n[        U R                  U5      $ rT   )r  r  r  r  )r!   r"   r#   r6   r  s        r   r7   mappedgenerator.filter  s)    TZZ8t00$77r   c                @    [         R                  " [        S5      5      e)Ns   list of strings is not mappabler   r:   s     r   r;   mappedgenerator.itermaps  s    q!CDEEr   c                8    [        U R                  U5      U5      $ rT   )r   r   r>   s       r   r@   mappedgenerator.join  s    7+S11r   c                &    U R                  XS5      $ r   )r@   r.   s      r   rC   mappedgenerator.show  s    yy3//r   c                6    [        U R                  U5      5      $ rT   )r  r   r.   s      r   rF   mappedgenerator.tobool  s    7+,,r   c                d    U R                  U5       Vs/ s H  n[        XU5      PM     sn$ s  snf rT   )r   re   )r!   r"   r#   r   s       r   rI   mappedgenerator.tovalue  s,    8<		'8JK8J1	'A.8JKKKs   -r  N)r   )r   r   r   r   rK   ra   r%   r   r+   r/   r2   ro   staticmethodr  r7   r;   r@   rC   rF   rI   r   r   r   r   r  r  g  s^    60722  8F20-Lr   r  c                   ^ ^^^^ [         R                  mTc  Sm[         R                  m[        UT U UU4S jU UU4S j5      $ )z>Wrap data to support both dict-like and string-like operationss   %s=%sc                   > TU TTU    0$ rT   r   )r   datar*   r`   s    r   rF  hybriddict.<locals>.<lambda>  s    35$q'*r   c                0   > TT" U 5      T" TU    5      4-  $ rT   r   )r   r  fmtprefmts    r   rF  r    s    #F47O44r   r   identityrk   r   )r  r*   r`   r  r   r  s   ```` @r   
hybriddictr    s<    F
{!!*4	 r   c                ~   ^^^ [         R                  mTc  Sm[         R                  m[        X0U4S jUU4S j5      $ )z>Wrap data to support both list-like and string-like operationss   %sc                   > TU 0$ rT   r   )r   r1  s    r   rF  hybridlist.<locals>.<lambda>  s	    ayr   c                   > TT" U 5      -  $ rT   r   )r   r  r  s    r   rF  r    s    C&)Or   r  )r  r1  r  r   r  s    `` @r   
hybridlistr    s4    F
{!!#02KLLr   c	                    UR                  5        V	V
s/ s H	  u  pXIXZ0PM     nn	n
[        XX+Xx5      n[        X4XVUS9$ s  sn
n	f )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.
)r*   r`   r  r   )r   r[  r  )r"   r#   r1  r  r*   r`   r  plural	separatorr   r   cfs                r   
compatdictr    sG      )-

5#%	A5$6EAd5qAA 	6s   ?c                B    [        XX#Xg5      n[        X4=(       d    UXXS9$ )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.
)r1  r  r   )r[  r  )	r"   r#   r1  r  elementr  r  r  r  s	            r   
compatlistr    s#     	$fHAdDcAAr   c                   ^ T VVs/ s H	  u  pEXES.PM     nnn[        XX&SS9n[        R                  " T5      m[        UTU4S jU4S j5      $ s  snnf )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.
)   name   sources   file_copies)r  c                   > X TU    S.$ )N)r     pathr  r   r   copiess    r   rF  &compatfilecopiesdict.<locals>.<lambda>  s    AfQi@r   c                   > SU TU    4-  $ )Ns   %s (%s)r   r   s    r   rF  r    s    *6!9~-r   )r[  r	   sortdictr   )r"   r#   r1  r  r   r   r  r  s      `    r   compatfilecopiesdictr    sX     1771	#A7$.IA]]6"F	@-	  	8s   Ac                R    [        XX#5      n[        XCS [        R                  5      $ )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                
    X S.$ )N)s   filer  r   )r   s    r   rF  !compatfileslist.<locals>.<lambda>  s    a4r   )r[  r   r   r  )r"   r#   r1  filesr  s        r   compatfileslistr
    s+     	$6A	4h6G6G r   c              #    ^ ^^#    U(       d  TS-   nU(       d0  SU-   nT R                  U5      (       a  T R                  UT5      v   gT R                  T5      (       dV  [        US   [        5      (       a  UR	                  U5      v   gU H#  n[        U5      nUR                  T5        Uv   M%     gSU-   n	T R                  U	5      (       a  T R                  U	T5      v   T4U UU4S jjn
ST-   nT R                  U5      (       a  UR                  5       nOSnU H  nU
" U5      v   M     Ub  U
" XS9v   S	U-   nT R                  U5      (       a  T R                  UT5      v   gg7f)
a  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                   > 0 n UR                  U 5        TR	                  TU5      nTR                  X5      $ ! [        [        [        4 a.     U  H	  u  p4XBU'   M      NJ! [        [        4 a    XT'     Naf = ff = frT   )updateAttributeError	TypeError
ValueErrorr  ry  )r   tagvmappingabr"   r#   r1  s        r   one_showcompatlist.<locals>.one/  s    	#OOA %%gx8s-- 	:6 	## DA"#QK z* #!"#	#s'   9 A<A  A84A<7A88A<s   last_)r  s   end_)preloadry  r   bytesr@   dictr  pop)r"   r#   r1  r   r  r  nonamer   rE  	startnamer  lastnamelastendnames   ```           r   r[  r[    sV    0 &??6""//&'22??4  fQi''..(( 		 G!  	F"Iy!!ooi11 . ." $Hx  zz|!f $%%Gwoogw//  s   E'E,c              #  d  #    [        U[        5      (       a  UR                  X5      n[        U[        5      (       a  Uv   g[        U[        5      (       a  [
        R                  " SU-  5      eUc  g[        US5      (       d  [        R                  " U5      v   gU H  n[        U[        5      (       a  UR                  X5      n[        U[        5      (       a  Uv   MD  Uc  MI  [        US5      (       d  [        R                  " U5      v   Mt  [        XU5       Sh  vN   M     g N	7f)z=Yield a single stream from a possibly nested set of iteratorssH   Mercurial IO including templates is done with bytes, not strings, got %rN__iter__)r   r   rC   r  strr   rf  r   r   rk   flatten)r"   r#   thingis       r   r$  r$  N  s     %!!

7,%	E3		 $$0278
 	
 
UJ''u%%A!W%%FF7,!U##Q
++&&q))"7Q777  8s   D"D0$D.%
D0c                f    [        U[        5      (       a  U$ SR                  [        XU5      5      $ )zETurn values into bytes by converting into text and concatenating themr   )r   r  r@   r$  r"   r#   r%  s      r   re   re   m  s*    %88GGe455r   c                F     U u  pU[         L a  U$ U[        L a  US   n OgM!  )z\Find symbolic name for the given compiled expression; returns None
if nothing found reliablyr   N)	runsymbol	runfilter)argry   r  s      r   findsymbolicnamer-  t  s4     
9KYq'C r   c                <     [        U 5        g! [         a     gf = f)NTF)nextStopIteration)xiters    r   r  r    s#    U s    
c                \    [        U[        R                  5      (       d  U$ [        XU5      $ )z&Evaluate a lazy byte string into value)r   typesGeneratorTypere   r(  s      r   r%  r%    s'    eU0011Wu--r   c                    Uu  p4U" XU5      $ )z}Evaluate given argument as a bare template object which may require
further processing (such as folding generator of strings)r   )r"   r#   r,  ry   r  s        r   
evalrawexpr6    s     JD$''r   c                2    [        XU5      n[        XU5      $ )z)Evaluate given argument to wrapped object)r6  r  )r"   r#   r,  r%  s       r   evalwrappedr8    s    w-Ew//r   c                    [        U[        5      (       a  U$ [        XU5      n[        U[        5      (       a  [	        U5      $ [        U5      $ )zLift object to a wrapped type)r   r   r%  r  rZ   r   r(  s      r   r  r    sC    %!!Wu-E%E""r   c           	     .    [        X[        XU5      5      $ )z%Evaluate given argument as value type)r  r6  r"   r#   r,  s      r   evalfuncargr<    s    wGc)JKKr   c                f    [        U[        5      (       a  UR                  X5      $ [        XU5      $ )z.Move the inner value object out of the wrapper)r   r   rI   r%  r(  s      r   r  r    s-    %!!}}W.. Ge,,r   c                    Uu  p4U[         L a"  U" XUSS9nUc  [        R                  " U5      nO	U" XU5      n[        XU5      R	                  X5      $ )zCEvaluate given argument as boolean, but also takes boolean literalsNdefault)r*  r   	parseboolr  rF   r"   r#   r,  ry   r  r%  s         r   evalbooleanrC    sY    JDyWtT:=((.EWt,w/66wHHr   c                2    [        XU5      n[        XXC5      $ )z\Evaluate given argument as a date tuple or a date string; returns
a (unixtime, offset) tuple)r6  
unwrapdater"   r#   r,  errr%  s        r   evaldaterH    s     w-Eg33r   c                b   [        U[        5      (       a  UR                  X5      $ [        XU5      n [        R
                  " U5      $ ! [         a)    [        R                  " U=(       d    [        S5      5      e[        R                   a    U(       d  e [        R                  " U5      ef = f)Ns   not a date tuple nor a string)
r   r   rI   r  r
   	parsedater  r   rj   r   r"   r#   r%  rG  s       r   rE  rE    s    %}}W..%0E$!!%(( KsIa(H&IJJ $s##$s   A
 
A$B.c                2    [        XU5      n[        XXC5      $ rT   )r6  r4  rF  s        r   evalintegerrM    s    w-E566r   c                    [        XU5      n [        U5      $ ! [        [        4 a)    [        R
                  " U=(       d    [        S5      5      ef = f)Ns   not an integer)r  r   r  r  r   rj   r   rK  s       r   r4  r4    sM    %0E<5zz" <s:a(9&:;;<s	   
 9Ac           	     .    [        X[        XU5      5      $ rT   )re   r6  r;  s      r   
evalstringrP    s    Wz'C'HIIr   c                V    Uu  p4U[         L a  U" XXDS9nO	U" XU5      n[        XU5      $ )zTEvaluate given argument as string template, but returns symbol name
if it is unknownr?  )r*  re   rB  s         r   evalstringliteralrR    s8     JDyWt:Wt,Wu--r   c                v     [         U   nU" XU5      $ ! [         a    [        R                  " SU-  5      ef = f)zBMove the inner value object out of the wrapper and coerce its types   invalid type specified: %r)_unwrapfuncbytypeKeyErrorr   rf  )r"   r#   r%  typr  s        r   r   r     sK    Jc" Wu%%  J$$%BS%HIIJs   	 $8c                    [        U5      $ rT   )r   r"   r#   r  s      r   
runintegerrY    s    t9r   c                    U$ rT   r   rX  s      r   	runstringr[  	  s    Kr   c                   ^  U 4S jnU$ )Nc                H   > [         R                  " [        S5      T-  5      e)Ns$   recursive reference '%s' in template)r   Abortr   )r"   r#   r*   s     r   showrecursion._recursivesymbolblocker.<locals>.showrecursion  s    kk!CDsJKKr   r   )r*   r_  s   ` r   _recursivesymbolblockerra    s    L r   c                   U R                  X5      nUc/  UR                  5       n[        U5      XR'    U R                  X%5      n[        U5      (       a	   U" X5      $ U$ ! [         a    Un N)f = f! [         a     g f = frT   )symbolcopyra  ry  r   r  r   )r"   r#   r*   r@  r   safemappings         r   r*  r*    s    w$Ay lln237	1A {{	W&& H   	A	 # 		s#   A A1 A.-A.1
A>=A>c              #  :   #    U H  n[        XU5      v   M     g 7frT   )r6  )r"   r#   templater,  s       r   runtemplaterh  )  s     3// s   c                    Uu  p4[        XU5      n[        USS 5      n [        XXV5      nU" U5      $ ! [        R                   a,  n[        R                  " [        U5      [        X45      S9eS nAff = f)N_intypehint)r6  getattrr   r   rj   r  _formatfiltererror)r"   r#   r  r,  filtr%  intypees           r   r+  r+  .  st    ICw-ET9d+FMWu=E{ MuQx.@.KLLMs   3 A3'A..A3c                    [         R                  " UR                  5      n[        U 5      nU(       d  [	        S5      U-  $ [	        S5      UU4-  $ )Ns(   incompatible use of template filter '%s's8   template filter '%s' is not compatible with keyword '%s')r   sysbytesr   r-  r   )r,  ro  fnsyms       r   rn  rn  9  sS    			4==	)B
3
C<=BBHI
M  r   c              #  f   #    [        U5       H  u  p4U R                  X5      nX5S'   Uv   M      g7f)zqGenerate 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  D  s4      ;'08 (rM  c              #  (  #     UR                  U 5      n[        XU5       H  n	[        X	U5      v   M     g ! [        R                   aD  n[        U5      nU(       d  e [	        S5      U-  n[        R                  " [        U5      US9eS nAff = f7f)Ns+   keyword '%s' does not support map operationrk  )r;   r   rj   r-  r   r  r  r6  )
r"   r#   ddargtargditerrG  ru  rl  r  s
             r   	_applymapr  M  s     6

7# w7d++ 8  6t$?@3FuSz556s%   B7 "BB?B

BBc                B    Uu  p4[        XU5      n[        [        XX44S9$ )N)r  )r8  r  r  )r"   r#   r  r|  r}  r{  s         r   runmapr  Z  s'    JDGd+A9G+CDDr   c                   Uu  p4[        XU5      n[        U[        5      (       a,  U R                  XR	                  U 5      5      n[        XU5      $  UR                  XU5      $ ! [        R                   aD  n[        U5      nU(       d  e [        S5      U-  n	[        R                  " [        U5      U	S9eS nAff = f)Ns.   keyword '%s' does not support member operationrk  )r8  r   rQ   r  rU   r*  r+   r   rj   r-  r   r  )
r"   r#   r  r|  membr{  r  rG  ru  rl  s
             r   	runmemberr  `  s    JDGd+A!X)9:d++6{{7T22 6t$BCcIuSz556s   A% %B=9?B88B=c                4    [        XU[        S5      5      nU* $ )Ns"   negation needs an integer argument)rM  r   rX  s      r   	runnegater  p  s"    $"G HD 5Lr   c                    Uu  p4n[        XU[        S5      5      n[        XU[        S5      5      n U" XE5      $ ! [         a     [        R                  " [        S5      5      ef = f)Ns#   arithmetic only defined on integerss   division by zero is not defined)rM  r   ZeroDivisionErrorr   r^  )r"   r#   r  ry   leftrights         r   runarithmeticr  w  ss    D$"H ID %#I!JEAD   Akk!>?@@As	   ; *A%c              #  T   #    SnU  H  nU(       a  SnOU(       a  Uv   Uv   M     g7f)z9Join items with the separator; Returns generator of bytesTFNr   )r  r?   firstr   s       r   r   r     s)     EEI s   &()   key   valueNNrb  )r  r  NNr   )NNNr   r   rT   )r   )I
__future__r   rL   r3  i18nr    r   r   r   r	   utilsr
   r   r^  r   r   r   rQ   rZ   r   r   r   r   r(  rd  r  r  r  r  r  r  r  r  r  r  r
  r[  r$  re   r-  r  r%  r6  r8  r  r<  r  rC  rH  rE  rM  r4  rP  rR  r  r   rT  r   rY  r[  ra  r*  rh  r+  rn  r  r  r  r  r  r  r   r   r   r   <module>r     s   # 
   	%++ 		u{{ 	J JZ
A 
A.7 .b+7 +\%08W %0PW>W W>t877 87vFw FR<w <~1' 1&$" $4(, 40, :Lg :LzM 	
B4 B&&
 <@H0V8>6
.(0L
-
I4$7
<J. 	+	9*	 &*0
M
,E6 Ar   