
    	^cfx                        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
mZmZmZmZmZmZmZmZmZmZmZmZ ddlmZmZ ej        Zej        Zej        Zej        Zej        Zej         Z ej!        Z!ej"        Z"i Z# ej$        e#          Z$ e$d          d             Z% e$d	d
          d             Z& e$dddh          d             Z' e$ddddh          d             Z( e$ddh          d             Z) e$d          d             Z* e$d          d             Z+ e$ddh          d             Z, e$dd dh          d!             Z- e$d"d#          d$             Z. e$d%          d&             Z/ e$d'          d(             Z0 e$d)dh          d*             Z1 e$d+dh          d,             Z2 e$d-dh          d.             Z3d/ Z4 e$d0          d1             Z5 e$d2          d3             Z6 e$d4          d5             Z7 e$d6          d7             Z8 e$d8dh          d9             Z9 e$d:          d;             Z: e$d<          d=             Z; e$d>          d?             Z< e$d@          dA             Z= e$dB          dC             Z> e$dD          dE             Z? e$dF          dG             Z@ e$dH          dI             ZA e$dJ          dK             ZB e$dLd h          dM             ZC e$dNd dh          dO             Z e$dP          dQ             ZD e$dR          dS             ZE e$dTdU          dV             ZF e$dWd dh          dX             ZG e$dY          dZ             ZH e$d[          d\             ZI e$d]          d^             ZJ e$d_d`d dh          da             ZK e$db          dc             ZLdd ZMe#N                                ZOdS )e    N   )_)bin)colordagopdiffutilencodingerrorminirstobsutilpycompat	registrarrevset
revsetlangscmutiltemplatefilters
templatekwtemplateutilutil)dateutil
stringutils   date(date[, fmt])c                 t   dt          |          cxk    rdk    s#n t          j        t          d                    t	          | ||d         t          d                    }d}t          |          dk    rt          | ||d                   }|t          j        |          S t          j        ||          S )zFormat a date. See :hg:`help dates` for formatting
    strings. The default is a Unix date format, including the timezone:
    "Mon Sep 04 15:13:13 2006 0700".r      s!   date expects one or two argumentsr   s   date expects a date informationN)lenr
   
ParseErrorr   evaldate
evalstringr   datestr)contextmappingargsdatefmts        9/usr/lib/python3/dist-packages/mercurial/templatefuncs.pyr"   r"   3   s    
 Taq!EFFGGGQ	
,-- D C
4yyA~~'4733
{%%%c***    s   dict([[key=]value...])s   *args **kwargs)argspecc                     t          j                    }|d         D ]}t          j        |          }|s!t	          j        t          d                    ||v s
||d         v r$t	          j        t          d          |z            t           |          ||<   |                     fd|d         	                                D                        t          j
        |          S )zvConstruct a dict from key-value pairs. A key may be omitted if
    a value expression can provide an unambiguous name.   argss   dict key cannot be inferreds   kwargss!   duplicated dict key '%s' inferredc              3   D   K   | ]\  }}|t          |          fV  d S Nevalfuncarg).0kvr   r    s      r$   	<genexpr>zdict_.<locals>.<genexpr>Z   sL        Aq 
K!,,-     r%   )r   sortdictr   findsymbolicnamer
   r   r   r,   updateitems
hybriddict)r   r    r!   datar/   r.   s   ``    r$   dict_r7   L   s    =??D'] 3 3)!,, 	F"1%C#D#DEEE99T)_,,"1%I#J#JQ#NOOOgw22QKK     O))++      "4(((r%   s)   diff([includepattern [, excludepattern]])   ctx   ui)requiresc           	          t                    dk    r!t          j        t          d                     fd}                     d          }                     d          }t          j        |          }|                    |                    g  |d           |d                    |          }d		                    |          S )
zCShow a diff, optionally
    specifying files to include or exclude.r   s(   diff expects zero, one, or two argumentsc                     | t                    k     r.t          |                                                    }|r|gS g S r*   )r   r   strip)isr!   r   r    s     r$   getpatternszdiff.<locals>.getpatternsk   sG    s4yy==7GT!W55;;==A s
	r%   r8   r9   r   r   )matchoptsr%   )
r   r
   r   r   resourcer   diffalloptsdiffrA   join)r   r    r!   r@   ctxuidiffoptschunkss   ```     r$   rE   rE   a   s     4yy1}}q!LMMNNN       

7F
+
+C			'5	)	)B#B''HXXiiKKNNKKNN;;(   F 88Fr%   s   extdata(source)   source   cache)r&   r:   c                    d|vr!t          j        t          d                    t          | ||d                   }|spt	          j        |d                   }|r3t          j        t          d          t          d          |z            t          j        t          d                    |                     |d                              di           }|                     |d          }||v r	||         }n,t          j	        |
                                |          x}||<   |                    |                                d	          S )
zBShow a text read from the specified extdata source. (EXPERIMENTAL)rK   s   extdata expects one arguments   empty data source specifieds   did you mean extdata('%s')?hintrL   s   extdatar8   r%   )r
   r   r   r   r   r2   rC   
setdefaultr   extdatasourcerepogetrev)r   r    r!   sourcesymcacherG   r6   s           r$   extdatarX   |   sD   
 q!@AABBB$y/::F F+DO<< 	F"011566<   
 "1%C#D#DEEEWh//:::rJJE


7F
+
+CV}&4SXXZZHHHuV}88CGGIIs###r%   s   files(pattern)c                 b   t          |          dk    s!t          j        t          d                    t	          | ||d                   }|                     |d          }|                    |g          }t          |                    |                    }t          j
        | |d|          S )zUAll files of the current changeset matching the pattern. See
    :hg:`help patterns`.r   s   files expects one argumentr   r8   s   file)r   r
   r   r   r   rC   rA   listmatchesr   compatfileslist)r   r    r!   rawrG   mfiless          r$   r_   r_      s     t99>>q!>??@@@
WgtAw
/
/C


7F
+
+C		3%AQ  E''5IIIr%   s1   fill(text[, width[, initialident[, hangindent]]])c                    dt          |          cxk    rdk    s#n t          j        t          d                    t	          | ||d                   }d}d}d}dt          |          cxk    rdk    rhn net          | ||d         t          d                    }	 t	          | ||d                   }t	          | ||d	                   }n# t          $ r Y nw xY wt          j        ||||          S )
zJFill many
    paragraphs with optional indentation. See the "fill" filter.r      s"   fill expects one to four argumentsr   L   r%   r   s   fill expects an integer width   )	r   r
   r   r   r   evalinteger
IndexErrorr   fill)r   r    r!   textwidth
initindent
hangindents          r$   rf   rf      s!    Taq!FGGHHHgwQ00DEJJCIIG.//
 
	#GWd1g>>J#GWd1g>>JJ 	 	 	D	 eZDDDs   .C 
CCs   filter(iterable[, expr])c                      dt                    cxk    rdk    s#n t          j        t          d                    t	           d                   }t                    dk    r fd}n fd}|                     |          S )zsRemove empty elements from a list or a dict. If expr specified, it's
    applied to each element to test emptiness.r   r   s#   filter expects one or two argumentsr   c                 0    |                                S r*   )tobool)wr   r    s    r$   selectzfilter_.<locals>.select   s    88GW---r%   c                     t          | t          j                  s!t          j        t          d                                        |                                         }t          |d                   S )Ns   not filterable by expressionr   )	
isinstancer   mappabler
   r   r   
overlaymaptomapevalboolean)rn   lmr!   r   r    s     r$   ro   zfilter_.<locals>.select   sj    a!677 K&q)H'I'IJJJ##GQWWW-=-=>>BwDG444r%   )r   r
   r   r   evalwrappedfilter)r   r    r!   iterablero   s   ```  r$   filter_rz      s     Taq!GHHIII7GT!W55H
4yyA~~	. 	. 	. 	. 	. 	. 	.
	5 	5 	5 	5 	5 	5 	5 ??7GV444r%   s   formatnode(node)c                     t          |          dk    r!t          j        t          d                    |                     |d          }t          | ||d                   }|j        r|S t          j        |          S )z;Obtain the preferred form of a changeset hash. (DEPRECATED)r   s   formatnode expects one argumentr9   r   )	r   r
   r   r   rC   r   	debugflagr   short)r   r    r!   rH   nodes        r$   
formatnoder      sw     4yyA~~q!CDDEEE			'5	)	)BgwQ00D	|  &&&r%   s   mailmap(author)   repoc                    t          |          dk    r!t          j        t          d                    t	          | ||d                   }|                     |d          }|                     |d          }d|vr1|j                            d          }t          j	        |          |d<   t          j
        |d         |          S )zNReturn the author, updated according to the value
    set in the .mailmap filer   s   mailmap expects one argumentr   rL   r   s   mailmaps   .mailmap)r   r
   r   r   r   rC   wvfstryreadr   parsemailmapmapname)r   r    r!   authorrW   rR   r6   s          r$   mailmapr      s     4yyA~~q!@AABBB$q'22FWh//EGW--Dy  --&3D99jeJ/888r%   s@   pad(text, width[, fillchar=' '[, left=False[, truncate=False]]])s!   text width fillchar left truncatec                    d|vsd|vr!t          j        t          d                    t          | ||d         t          d                    }t	          | ||d                   }d}d}d}d|v r]t	          | ||d                   }t          t          j        |                    dk    r!t          j        t          d	                    d
|v rt          | ||d
                   }d|v rt          | ||d                   }|t          j
        t          j        |                    z
  }|dk     r+|r)t          j        t          j        |          ||          S |dk    r|S |r||z  |z   S |||z  z   S )z#Pad text with a
    fill character.s   texts   widths#   pad() expects two to four argumentss   pad() expects an integer widthF    s   fillcharr   s%   pad() expects a single fill characters   lefts   truncater   )leftside)r
   r   r   rd   r   r   r   stripeffectsru   r	   colwidthtrim)	r   r    r!   rh   rg   truncateleftfillchar	fillwidths	            r$   padr      s    dhd22q!GHHIIIX	
+,, E gwW66DHDHdgw[0ABBu!(++,,11"1%M#N#NOOO$7GT'];;dwk1BCC)%*<T*B*BCCCI1}}}}U/55utLLLLA~~ +)#d**h***r%   s&   indent(text, indentchars[, firstline])c                 ^   dt          |          cxk    rdk    s#n t          j        t          d                    t	          | ||d                   }t	          | ||d                   }|}t          |          dk    rt	          | ||d                   }t          j        |||          S )zIndents all non-empty lines
    with the characters given in the indentchars string. An optional
    third parameter will override the indent for the first line only
    if present.r   rc   s'   indent() expects two or three argumentsr   r   )	firstline)r   r
   r   r   r   r   indent)r   r    r!   rg   r   r   s         r$   r   r   *  s     Taq!KLLMMMgwQ00D$q'22FI
4yyA~~wa99	!$)DDDDr%   s   get(dict, key)c                    t          |          dk    r!t          j        t          d                    t	          | ||d                   }t          | ||d                   }	 |                    | ||          S # t          j        $ r7}t          d          }t          j        t          |          |          d}~ww xY w)zGet an attribute/key from an object. Some keywords
    are complex types. This function allows you to obtain the value of an
    attribute on these types.r   s   get() expects two argumentsr   r   s&   get() expects a dict as first argumentrN   N)r   r
   r   r   rw   
evalrawexp	getmemberbytes)r   r    r!   dictargkeyerrrO   s          r$   rS   rS   >  s    
 4yyA~~q!?@@AAA'7DG44G
WgtAw
/
/C6  '3777 6 6 6:;;uSzz55556s   $A; ;C
2B<<Cs    config(section, name[, default])c                 h    |                      |d          j        }t          | |||t                    S )z5Returns the requested hgrc config option as a string.r9   )rC   config_configr   r   r    r!   fns       r$   r   r   Q  s2     
		'5	)	)	0B7GT2z:::r%   s$   configbool(section, name[, default])c                 h    |                      |d          j        }t          | |||t                    S )z6Returns the requested hgrc config option as a boolean.r9   )rC   
configboolr   ru   r   s       r$   r   r   X  s2     
		'5	)	)	4B7GT2{;;;r%   s#   configint(section, name[, default])c                 h    |                      |d          j        }t          | |||t                    S )z7Returns the requested hgrc config option as an integer.r9   )rC   	configintr   rd   r   s       r$   r   r   _  s2     
		'5	)	)	3B7GT2{;;;r%   c                 V   dt          |          cxk    rdk    s#n t          j        t          d                    t	          | ||d                   }t	          | ||d                   }t          |          dk    r  || ||d                   } ||||          S  |||          S )Nr   rc   s%   config expects two or three argumentsr   r   )r   r
   r   r   evalstringliteral)r   r    r!   configfn	defaultfnsectionnamedefaults           r$   r   r   f  s    Taq!IJJKKK
  $q'::GWgtAw77D
4yyA~~)GWd1g66xw///x&&&r%   s   if(expr, then[, else])c                 4   dt          |          cxk    rdk    s#n t          j        t          d                    t	          | ||d                   }|rt          | ||d                   S t          |          dk    rt          | ||d                   S dS )z?Conditionally execute based on the result of
    an expression.r   rc   s!   if expects two or three argumentsr   r   N)r   r
   r   r   ru   r   )r   r    r!   tests       r$   if_r   v  s     Taq!EFFGGGwa11D 5'7DG444	Ta'7DG444 
r%   s*   ifcontains(needle, haystack, then[, else])c                    dt          |          cxk    rdk    s#n t          j        t          d                    t	          | ||d                   }	 t          | ||d                   }|                    | ||          }n# t          j        $ r d}Y nw xY w|rt          | ||d                   S t          |          dk    rt          | ||d                   S dS )	zNConditionally execute based
    on whether the item "needle" is in "haystack".rc   ra   s*   ifcontains expects three or four argumentsr   r   Fr   N)r   r
   r   r   rw   r   contains)r   r    r!   haystackneedlefounds         r$   
ifcontainsr     s     Taq!NOOPPP7GT!W55HGWd1g66!!'7F;;     5'7DG444	Ta'7DG444 
s   .B BBs    ifeq(expr1, expr2, then[, else])c                 j   dt          |          cxk    rdk    s#n t          j        t          d                    t	          | ||d                   }t	          | ||d                   }||k    rt          | ||d                   S t          |          dk    rt          | ||d                   S dS )zBConditionally execute based on
    whether 2 items are equivalent.rc   ra   s$   ifeq expects three or four argumentsr   r   r   N)r   r
   r   r   r   r   )r   r    r!   r   rA   s        r$   ifeqr     s     Taq!HIIJJJgwQ00Dwa11Eu}}'7DG444	Ta'7DG444 
r%   s   join(list, sep)c                 0   dt          |          cxk    rdk    s#n t          j        t          d                    t	          | ||d                   }d}t          |          dk    rt          | ||d                   }|                    | ||          S )z&Join items in a list with a delimiter.r   r   s!   join expects one or two argumentsr   r   )r   r
   r   r   rw   r   rF   )r   r    r!   joinsetjoiners        r$   rF   rF     s     Taq!EFFGGG'7DG44GF
4yy1}}GWd1g66<<&111r%   s   label(label, expr)c                    t          |          dk    r!t          j        t          d                    |                     |d          }t          | ||d                   }t          | ||d                   }|                    ||          S )zApply a label to generated content. Content with
    a label applied can result in additional post-processing, such as
    automatic colorization.r   s   label expects two argumentsr9   r   r   )r   r
   r   r   rC   r   r   label)r   r    r!   rH   thingr   s         r$   r   r     s    
 4yyA~~q!?@@AAA			'5	)	)Bwa11E gwQ88E88E5!!!r%   s   latesttag([pattern])c                     t          |          dk    r!t          j        t          d                    d}t          |          dk    rt	          | ||d                   }t          j        | ||          S )a  The global tags matching the given pattern on the
    most recent globally tagged ancestor of this changeset.
    If no such tags exist, the "{tag}" template resolves to
    the string "null". See :hg:`help revisions.patterns` for the pattern
    syntax.
    r   s&   latesttag expects at most one argumentNr   )r   r
   r   r   r   r   showlatesttags)r   r    r!   patterns       r$   	latesttagr     sk     4yy1}}q!JKKLLLG
4yyA~~WgtAw77$Wgw???r%   s   localdate(date[, tz])c                 |   dt          |          cxk    rdk    s#n t          j        t          d                    t	          | ||d         t          d                    }t          |          dk    rd}t          | ||d                   }t          |t                    rt          j	        |          \  }}|rd}|G	 t          |          }nP# t          t          f$ r" t          j        t          d                    w xY wnt          j                    d         }t          j        |d         |f          S )zIConverts a date to the specified timezone.
    The default is local date.r   r   s&   localdate expects one or two argumentsr   s$   localdate expects a date informationNs   localdate expects a timezone)r   r
   r   r   r   r,   rq   r   r   parsetimezoneint	TypeError
ValueErrormakedater   r"   )r   r    r!   r"   tzoffsettz	remainders          r$   	localdater     sU    Taq!JKKLLLQ	
122 D 4yyA~~'4733b%   	 "*"8"<"<Hi  Kr77z* K K K&q)H'I'IJJJK  $&&q)d1gx0111s   C 3Ds   max(iterable)c                 X   t          |          dk    r!t          j        t          d                    t	          | ||d                   }	 |                    | |          S # t          j        $ r7}t          d          }t          j        t          |          |          d}~ww xY w)zReturn the max of an iterabler   s   max expects one argumentr   s(   max first argument should be an iterablerN   N)r   r
   r   r   rw   getmaxr   r   r    r!   kwargsry   r   rO   s          r$   max_r          4yyA~~q!<==>>>7GT!W55H6w000 6 6 6<==uSzz55556   A# #B)22B$$B)s   min(iterable)c                 X   t          |          dk    r!t          j        t          d                    t	          | ||d                   }	 |                    | |          S # t          j        $ r7}t          d          }t          j        t          |          |          d}~ww xY w)zReturn the min of an iterabler   s   min expects one argumentr   s(   min first argument should be an iterablerN   N)r   r
   r   r   rw   getminr   r   s          r$   min_r     r   r   s	   mod(a, b)c                     t          |          dk    s!t          j        t          d                    d }t	          j        | |||d         |d         f          S )z0Calculate a mod b such that a / b + a mod b == ar   s   mod expects two argumentsc                     | |z  S r*    )abs     r$   <lambda>zmod.<locals>.<lambda>$  s
    A r%   r   r   )r   r
   r   r   r   runarithmetic)r   r    r!   funcs       r$   modr     s`     t99>>q!=>>???D%4a$q'2  r%   s   obsfateoperations(markers)c                 ^   t          |          dk    r!t          j        t          d                    t	          | ||d                   }	 t          j        |          }t          j        |d          S # t          t          f$ r$ t          d          }t          j        |          w xY w)CCompute obsfate related information based on markers (EXPERIMENTAL)r   s&   obsfateoperations expects one argumentr   s	   operationr   s6   obsfateoperations first argument should be an iterable)r   r
   r   r   r,   r   markersoperationsr   
hybridlistr   KeyErrorr   r    r!   markersr6   errmsgs         r$   obsfateoperationsr   *  s     4yyA~~q!JKKLLL'7DG44G'(11&t,????x  ' ' 'LMMv&&&'s   )A7 75B,s   obsfatedate(markers)c                 `   t          |          dk    r!t          j        t          d                    t	          | ||d                   }	 t          j        |          }t          j        |dd          S # t          t          f$ r$ t          d          }t          j        |          w xY w)r   r   s    obsfatedate expects one argumentr   s   dates   %d %d)r   r#   s0   obsfatedate first argument should be an iterable)r   r
   r   r   r,   r   markersdatesr   r   r   r   r   s         r$   obsfatedater   <  s     4yyA~~q!DEEFFF'7DG44G'#G,,&t'xHHHHx  ' ' 'FGGv&&&'s   *A8 85B-s   obsfateusers(markers)c                 j   t          |          dk    r!t          j        t          d                    t	          | ||d                   }	 t          j        |          }t          j        |d          S # t          t          t          f$ r$ t          d          }t          j        |          w xY w)r   r   s!   obsfateusers expects one argumentr   s   userr   s>   obsfateusers first argument should be an iterable of obsmakers)r   r
   r   r   r,   r   markersusersr   r   r   r   r   )r   r    r!   r   r6   msgs         r$   obsfateusersr   O  s     4yyA~~q!EFFGGG'7DG44G	$#G,,&t'::::x, $ $ $
 
 s###$s   )A7 7;B2s    obsfateverb(successors, markers)c                 T   t          |          dk    r!t          j        t          d                    t	          | ||d                   }t	          | ||d                   }	 t          j        ||          S # t          $ r$ t          d          }t          j        |          w xY w)zFCompute obsfate related information based on successors (EXPERIMENTAL)r   s!   obsfateverb expects two argumentsr   r   s.   obsfateverb first argument should be countable)r   r
   r   r   r,   r   obsfateverbr   )r   r    r!   
successorsr   r   s         r$   r   r   d  s     4yyA~~q!EFFGGGWgtAw77J'7DG44G'":w777 ' ' 'DEEv&&&'s   $A9 9.B's   relpath(path)c                     t          |          dk    r!t          j        t          d                    |                     |d          }t          | ||d                   }|                    |          S )zhConvert a repository-absolute path into a filesystem path relative to
    the current working directory.r   s   relpath expects one argumentr   r   )r   r
   r   r   rC   r   pathto)r   r    r!   rR   paths        r$   relpathr   v  si     4yyA~~q!@AABBBGW--DgwQ00D;;tr%   s   revset(query[, formatargs...])c                 *   
 t          |          dk    s!t          j        t          d                    t	           |d                   }                     d          

fd}t          |          dk    r5d} fd|dd         D             } |t          j        |g|R            }nK                     d          }|                    d	i           }	|}||	v r	|	|         }n ||          }||	|<   t          j
        
|d
|          S )z8Execute a revision set query. See
    :hg:`help revset`.r   s$   revset expects one or more argumentsr   c                 v    t          j        j        | t          j                            } |          S )N)lookup)	revsetmodrA   rH   lookupfn)exprr^   rR   s     r$   queryzrevset.<locals>.query  s3    ODGT)2DT2J2JKKKqwwr%   r   Nc                 2    g | ]}t          |          S r   r+   )r-   r   r   r    s     r$   
<listcomp>zrevset.<locals>.<listcomp>  s%    III1k'7A66IIIr%   rL   s   revsetcaches   revision)r   cachekey)r   r
   r   r   r   rC   r   
formatspecrP   r   revslist)r   r    r!   r]   r   r   
formatargsrevsrW   revsetcacherR   s   ``        @r$   r   r     sH    t99q==q!HIIJJJ
WgtAw
/
/CGW--D     4yy1}}IIIIIQRRIII
uZ*3<<<<==  (33&&~r::+s#DD5::D#K t+LLLLr%   s   rstdoc(text, style)c                     t          |          dk    r!t          j        t          d                    t	          | ||d                   }t	          | ||d                   }t          j        ||dg          S )zFormat reStructuredText.r   s   rstdoc expects two argumentsr   r   s   verbose)stylekeep)r   r
   r   r   r   r   format)r   r    r!   rg   r  s        r$   rstdocr
    sp     4yyA~~q!@AABBBgwQ00Dwa11E>$e:,????r%   s   search(pattern, text)c           	         t          |          dk    r!t          j        t          d                    t	          | ||d                   }t	          | ||d                   }	 t          j        |          }n7# t
          j        $ r% t          j        t          d          |z            w xY w|                                 t          t          j
        |j                            z  }|rQt          j        t          d          d                    d t          |          D                       |d	z            |                    |          }|st          j                    S d
|                    d          i}|                    d t'          |                                d          D                        |                    t          j
        |                                                     t          j        |d          S )zLook for the first text matching the regular expression pattern.
    Groups are accessible as ``{1}``, ``{2}``, ... in %-mapped template.r   s   search expects two argumentsr   r   s!   search got an invalid pattern: %ss2   invalid group %(group)s in search pattern: %(pat)ss   , c              3       K   | ]	}d |z  V  
dS )s   '%s'Nr   )r-   gs     r$   r0   zsearch.<locals>.<genexpr>  s&      $L$LQWq[$L$L$L$L$L$Lr%   )s   groups   pat   0c              3   *   K   | ]\  }}d |z  |fV  dS )s   %dNr   )r-   r>   r/   s      r$   r0   zsearch.<locals>.<genexpr>  s.      FFAuqy!nFFFFFFr%   s   {0})tmpl)r   r
   r   r   r   recompileknownresourcekeyssetr   byteskwargs
groupindexrF   sortedsearchr   mappingnonegroupr3   	enumerategroups	groupdictmappingdict)	r   r    r!   patsrcpatre	badgroupsrA   rv   s	            r$   r  r    s    4yyA~~q!@AABBB
WgtAw
/
/C
WgtAw
/
/CN
38 N N Nq!EFFLMMMN ))++cU-../ / I  
CDD**$L$L&:K:K$L$L$LLL 
 
 	
 LLE *')))
A	BIIFF5<<>>1)E)EFFFFFFIIh"5??#4#455666#BV4444s   $A9 94B-s   separate(sep, args...)s	   sep *argsc              #      K   d|vr!t          j        t          d                    t          | ||d                   }d}|d         D ]#}t          | ||          }|s|rd}n|V  |V  $dS )z,Add a separator between non-empty arguments.s   seps&   separate expects at least one argumentTr(   FN)r
   r   r   r   )r   r    r!   sepfirstargargstrs          r$   separater(    s       Tq!JKKLLL
WgtF|
4
4CEG}  GWc22 	 	EEIII r%   s   shortest(node, minlength=4)c                 .   dt          |          cxk    rdk    s#n t          j        t          d                    t	          | ||d                   }d}t          |          dk    r%t          | ||d         t          d                    }|                     |d          }d|j        j        z  }t          |          |k    r|S t          |          |k    r(	 t          |          }ne# t          j        $ r |cY S w xY w	 t          j        ||          }n3# t          j        $ r |j        j        }Y nt          j        $ r |cY S w xY w|s|S |                     |d          }	 t          j        ||||          S # t          j        $ r |cY S w xY w)	z1Obtain the shortest representation of
    a node.r   r   s'   shortest() expects one or two argumentsr   ra   s'   shortest() expects an integer minlengthr   rL   )r   r
   r   r   r   rd   rC   nodeconstantsnodelenr   binasciiErrorr   resolvehexnodeidprefixWdirUnsupportedwdiridLookupErrorshortesthexnodeidprefixRepoLookupError)	r   r    r!   hexnode	minlengthrR   
hexnodelenr~   rW   s	            r$   shortestr7    s    Taq!KLLMMM'4733GI
4yy1}}G899
 
	 GW--DT'//J
7||j  	W	#	#	w<<DD~ 	 	 	NNN		1$@@DD$ 	- 	- 	-%,DDD  	 	 	NNN	 	NWh//E.tT9eLLL    s<   C- -D DD E8E
E)F   FFs   strip(text[, chars])c                 P   dt          |          cxk    rdk    s#n t          j        t          d                    t	          | ||d                   }t          |          dk    r,t	          | ||d                   }|                    |          S |                                S )z[Strip characters from a string. By default,
    strips all leading and trailing whitespace.r   r   s"   strip expects one or two argumentsr   )r   r
   r   r   r   r=   )r   r    r!   rg   charss        r$   r=   r=     s     Taq!FGGHHHgwQ00D
4yyA~~7GT!W55zz%   ::<<r%   s%   sub(pattern, replacement, expression)c              #   6  K   t          |          dk    r!t          j        t          d                    t	          | ||d                   }t	          | ||d                   }t	          | ||d                   }	 t          j        |          }n7# t
          j        $ r% t          j        t          d          |z            w xY w	 |                    ||          V  dS # t
          j        $ r% t          j        t          d          |z            w xY w)	z8Perform text substitution
    using regular expressions.rc   s   sub expects three argumentsr   r   r   s   sub got an invalid pattern: %ss"   sub got an invalid replacement: %sN)r   r
   r   r   r   r  r  sub)r   r    r!   r  rplr   r!  s          r$   r;  r;  &  s+      4yyA~~q!?@@AAA
WgtAw
/
/C
WgtAw
/
/C
WgtAw
/
/CK
38 K K Kq!BCCcIJJJKOiiS!!!!!!!8 O O Oq!FGG#MNNNOs   =B 4C
C$ $4Ds   startswith(pattern, text)c                     t          |          dk    r!t          j        t          d                    t	          | ||d                   }t	          | ||d                   }|                    |          r|S dS )ziReturns the value from the "text" argument
    if it begins with the content from the "pattern" argument.r   s    startswith expects two argumentsr   r   r%   )r   r
   r   r   r   
startswith)r   r    r!   patnrg   s        r$   r>  r>  =  su     4yyA~~q!DEEFFFgwQ00DgwQ00Dt 3r%   s   subsetparents(rev, revset)s
   rev revsetc                    d|vsd|vr!t          j        t          d                    |                     |d          }t	          j        | ||d                   }t	          j        | ||d                   }t          |t          j                  s!t          j        t          d                    |	                    | |          }|j
        }|rT|                     |d          }|                    di           }	||	v r	|	|         }
n2t          j        ||          }
|
|	|<   nt          j        |||          }
t	          j        ||
                    |                    S )	z@Look up parents of the rev in the sub graph given by the revset.s   revs   revsets#   subsetparents expects two argumentsr   s&   subsetparents expects a queried revsetrL   s   subsetparentswalker)startrev)r
   r   r   rC   r   rd   rw   rq   r  tovaluer   rP   r   subsetparentswalker
parentsset)r   r    r!   rR   rT   qsubsetr   rW   walkercachewalkers              r$   subsetparentsrI  L  sh    TYd22q!GHHIIIGW--D

"7GT&\
B
BC 	 '4	?CCAa.// Mq!JKKLLLYYw((F
*C
 G  (33&&'=rBB+ %FF.tV<<F%K *4#FFF v'8'8'='=>>>r%   s   word(number, text[, separator])c                    dt          |          cxk    rdk    s3n t          j        t          d          t          |          z            t	          | ||d         t          d                    }t          | ||d                   }t          |          dk    rt          | ||d                   }nd}|                    |          }|t          |          k    s|t          |           k     rdS ||         S )	z"Return the nth word from a string.r   rc   s+   word expects two or three arguments, got %dr   s   word expects an integer indexr   Nr%   )r   r
   r   r   rd   r   split)r   r    r!   numrg   splittertokenss          r$   wordrO  s  s    Ta<==D		I
 
 	
 Q	
*++ C gwQ00D
4yyA~~gwQ88ZZ!!F
c&kkSCKK<//sc{r%   c                 X    |j                                         D ]\  }}|t          |<   dS )z2Load template function from specified registrarobjN)_tabler4   funcs)rH   extnameregistrarobjr   r   s        r$   loadfunctionrU    s9    ")//11  
dd r%   )Pr,  r  i18nr   r~   r    r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   utilsr   r   r   rw   r,   ru   r   rd   r   r   rR  templatefuncr"   r7   rE   rX   r_   rf   rz   r   r   r   r   rS   r   r   r   r   r   r   r   rF   r   r   r   r   r   r   r   r   r   r   r   r
  r  r(  r7  r=   r;  r>  rI  rO  rU  valuesi18nfunctionsr   r%   r$   <module>r\     s    				                                               $       
 $
&&& &$
 2  	%y%e,, "##+ + $#+0 '1BCCC) ) DC)( 0FE?    0 	VX4F  $ $ $2 6(333J J 43J BCCE E DCE8 )**5 5 +*5. !UG444
' 
' 54
'  GX+>???9 9 @?9$ I0  &+ &+	 &+R 788E E 98E&   6 6 ! 6$ 1UGDDD; ; ED; 5HHH< < IH< 4wGGG< < HG<' ' '  '((5 5 )(5 ;<<5 5 =<5( 1225 5 325  !!
2 
2 "!
2 #ug666" " 76"" %&&@ @ '&@" &''2 2 ('2@ 6 6  6 6 6  6 l	 	 	 +,,' ' -,'" %&&' ' '&'$ &''$ $ ('$( 122' ' 32'" '333	 	 43	 /7H:MNNNM M ONM< $%%	@ 	@ &%	@ &''#5 #5 ('#5L '>>>  ?>& ,7JKKK) ) LK)X %&&  '& 677O O 87O, *++  ,+ !x   
? ? 
?D 011  218   r%   