
    	^ck                        d dl Z d dlZd dlZd dlZddlmZ ddlmZmZ ddl	m
Z
 ddlmZmZmZmZ ddlmZmZ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!  ej"        d
          Z#dIdZ$d Z%dIdZ& G d d          Z' G d de'          Z(d Z)dJdZ*d Z+d Z,dIdZ-dIdZ.d Z/d Z0d Z1d Z2d Z3d Z4d Z5dIdZ6dId Z7dKd!Z8d" Z9d# Z:d$ Z;d% Z<d& Z=d' Z>d( Z?d) Z@d*d+he@_A        d, ZBd- ZCd*d+heC_A        d. ZDd/ ZEd0 ZFd1 ZGd2 ZHd3 ZId4 ZJd5 ZKd6 ZLd7 ZMdLd9ZNd: ZOd; ZPd< ZQd= ZRd> ZSd? ZTd@ ZUdA ZVdB ZW G dC dDejX                  ZY G dE dFej                  ZZdG Z[dH Z\dS )M    N   )_)hexshort)setattr   )ErrorResponseHTTP_BAD_REQUESTHTTP_NOT_FOUND	paritygen)contextdiffutilerrormatchmdiffobsutilpatchpathutilpycompatscmutiltemplatefilters
templatekwtemplateutiluiutil)
stringutil))   zip)s   application/zipr   s   .zipN)s   gz)s   application/x-gzips   tgzs   .tar.gzN)s   bz2)s   application/x-bzip2s   tbz2s   .tar.bz2Nc                    |                      ddd          }g }t                                          D ]D\  }}||v s|                     dd|z   d          r |                    ||d         ||d           Et          j        |          S )N   webs   allow-archiveT	untrusteds   allowr   )   types	   extension   nodes   url)
configlistarchivespecsitems
configboolappendr   mappinglist)r   nodeidurlallowedarchivestypspecs          9/usr/lib/python3/dist-packages/mercurial/hgweb/webutil.pyarchivelistr1   7   s    mmF$4mEEGH!''))  	T'>>R]]HsNd + 
 
> OO "&q'#	    #H---    c                     | dd         dk    rd| z   } | dd          dk    r
| d d         } t           j                            |           }|dk    rdS |dz   S )Nr   r      /)ospathdirname)pups     r0   r:   r:   K   se    1v~~1Hv~~crcF			B	Tzzt9r2   c              #      K   |r7|V  |dk    r|dk    rd}|V  | dk    sJ |dk    sJ | |k    r| dz  } | |k    	 d| z  V  d| z  V  | dz  } )	N   (   2   r   
   Tr       )step	firststeps     r0   _navseqrD   V   s       ??yBIOOOaxxxx1}}}}iBJD i$h$h
r2   c                   0    e Zd Zd Zd ZeZd Zd Zd ZdS )revnavc                     |j         | _        dS )zUNavigation generation object

        :repo: repo object we generate nav for
        N)	changelog_revlog)selfrepos     r0   __init__zrevnav.__init__g   s     ~r2   c                 .    |                                  duS )z,return True if any revision to navigate overN)_firstrJ   s    r0   __nonzero__zrevnav.__nonzero__o   s    {{}}D((r2   c                 h    	 t          t          | j                            S # t          $ r Y dS w xY w)z1return the minimum non-filtered changeset or NoneN)nextiterrI   StopIterationrO   s    r0   rN   zrevnav._firstu   sA    	T\**+++ 	 	 	44	s    # 
11c                 P    t          | j                            |                    S N)r   rI   noderJ   revs     r0   r   z
revnav.hex|   s     4<$$S))***r2   c                    | s<t          j        t          j        g           t          j        g           dg          S g }t          d|          D ]:}||k    r n1|                    ||z              |                    ||z
             ;|                                 |                                 }d|z  |                     |          dg}g }|D ]}	|	| j        vr||	cxk     r|k     rAn n>|                    dt          |	|z
            z  |                     |	          d           d|	cxk     r|k     rAn j|                    dt          |	|z
            z  |                     |	          d           |                    ddd           t          j        t          j        |          t          j        |          dg          S )	a  computes label and revision id for navigation link

        :pos: is the revision relative to which we generate navigation.
        :pagelen: the size of each navigation page
        :limit: how far shall we link

        The return is:
            - a single element mappinglist
            - containing a dictionary with a `before` and `after` key
            - values are dictionaries with `label` and `node` keys
        )s   befores   afterr   s   (%i))s   labelr#   s   +%dr   s   -%d   tip)	r   r)   rD   r(   sortrN   r   rI   abs)
rJ   pospagelenlimittargetsffirst	navbeforenavafterrY   s
             r0   genz
revnav.gen   s     		+ $0#;B#?#?".":2">">    G$$ 	$ 	$A5yyNN37###NN37#### '%$((5//JJK	 
	 
	C$,&&S    5     %C#I6#OO   3}}}}}}}}}  %C#I6#OO   	6F;;<<< '  ,7	BB*6x@@ 
 
 	
r2   N)	__name__
__module____qualname__rL   rP   __bool__rN   r   rf   rA   r2   r0   rF   rF   f   sf        & & &) ) ) H  + + +8
 8
 8
 8
 8
r2   rF   c                       e Zd Zd Zd ZdS )
filerevnavc                 v    |                                 j        | _        |                    |          | _        dS )zNavigation generation object

        :repo: repo object we generate nav for
        :path: path of the file we generate nav for
        N)
unfilteredrH   
_changelogfilerI   )rJ   rK   r7   s      r0   rL   zfilerevnav.__init__   s-     //++5yyr2   c                     t          | j                            | j                            |                              S rV   )r   ro   rW   rI   linkrevrX   s     r0   r   zfilerevnav.hex   s0    4?''(<(<S(A(ABBCCCr2   N)rg   rh   ri   rL   r   rA   r2   r0   rl   rl      s7        	' 	' 	'D D D D Dr2   rl   c              #   ^  K   |D ]}|                                 |                                |                                |                                |                                |                                d}t          j        |d          r|                                |d<   |V  d S )N)r#      revs   user   dates   description   branchs   path   file)	r   rY   userdatedescriptionbranchr   safehasattrr7   )r   ctxssds       r0   _ctxsgenr      s        UUWWEEGGVVXXVVXXMMOOxxzz
 
 Aw'' 	"AgJ r2   c                     | g } d | D             } t          |           dk    r | d                                         |k    rg } t          j        t          | f          S )Nc                 p    g | ]3}|                                 |                                j        k    1|4S rA   )rW   rK   nullid).0r~   s     r0   
<listcomp>z_siblings.<locals>.<listcomp>   s4    CCCaqvvxx16688?'B'B'B'B'Br2   r   r   args)lenrY   r   mappinggeneratorr   )siblingshiderevs     r0   	_siblingsr      sf    CC8CCCH
8}}hqkoo//7::(DDDDr2   c                     t          j        |d|d          }dD ]G}| j                            |          }|)t	          j        |          }t          ||||nd           H|S )NT)r!   section
whitespace)s   ignorewss   ignorewsamounts   ignorewseols   ignoreblanklines)r   difffeatureoptsqsparamsgetr   	parseboolr   )reqr   r   diffoptskvs         r0   r   r      s    '
dG  H 	? 	? LQ=$Q''AHaam>>>Or2   c                 R    t          | |d          }|                    d|          S )Ns   annotateT)followr   )r   annotate)r   fctxr   r   s       r0   r   r      s)    sB44H==x=888r2   c                 H   t          | t          j                  rg|                                 }|                                                                 |k    r)t          |                                 |         g|          S t          |                                 |          S rV   )	
isinstancer   basefilectxintrorev	changectxrY   r   rK   parents)ctxhider   s      r0   r   r      s{    #w*++ ;<<>>==??  H,,chhjj23T:::S[[]]D)))r2   c                 F    t          |                                 |          S rV   )r   children)r   r   s     r0   r   r     s    S\\^^T***r2   c                     |                                  }|r1t          j        |d         t          |d                   dg          S t          j        g           S )Nr   r   )rw   r#   )renamedr   r)   r   )r   rs     r0   
renamelinkr     sS    A O'1Q4#ad)))L)L(MNNN#B'''r2   c                 T    t          j        |                     |          d          S N   namename)r   
hybridlistnodetagsrK   rW   s     r0   nodetagsdictr     s$    "4==#6#6WEEEEr2   c                 T    t          j        |                     |          d          S r   )r   r   nodebookmarksr   s     r0   nodebookmarksdictr     s&    "4#5#5d#;#;'JJJJr2   c                    g }|                                 }	 |                     |          }n# t          j        $ r d }Y nw xY w||                                k    r|                    |           t          j        |d          S r   r{   	branchtipr   RepoLookupErrorrW   r(   r   r   rK   r   branchesr{   
branchnodes        r0   nodebranchdictr     s    HZZ\\F^^F++

    


SXXZZ"8'::::   . AAc                    g }|                                 }	 |                     |          }n# t          j        $ r d }Y nw xY w|dk    r-||                                k    r|                    |           t          j        |d          S Ns   defaultr   r   r   r   s        r0   nodeinbranchr   %  s    HZZ\\F^^F++

    



chhjj 8 8"8'::::r   c                     g }|                                  }|dk    r|                    |           t          j        |d          S r   )r{   r(   r   r   )r   r   r{   s      r0   nodebranchnodefaultr   1  sG    HZZ\\F"8'::::r2   c              #   2   K    ||          D ]}||iV  	d S rV   rA   )r   rb   rW   r   ts        r0   _nodenamesgenr   9  s6      QtWW  Qi r2   c                 `    || j         }| j        |df}t          j        t          ||          S )Ns   tagr   r   )r   r   r   r   r   rK   t1rW   r   s       r0   showtagr   >  s4    |{M4(D(TKKKKr2   c                 `    || j         }| j        |df}t          j        t          ||          S )Ns   bookmarkr   )r   r   r   r   r   r   s       r0   showbookmarkr   E  s5    |{k2D(TKKKKr2   c                      g                                   t          |          d  fd}t          j        |          S )Nc                 H    | d          | d                                          fS )Nr   r   )rY   )items    r0   <lambda>zbranchentries.<locals>.<lambda>P  s    QKa7 r2   c              3     K   d}sK                                                                 D ]$\  }}}}                    |         |f           %t          d          D ]\  }}	dk    r	|	k    r d S |dz  }|rd}n|                                vrd}nd}t          
          |                                ||                                |                                dV  d S )	Nr   T)keyreverser   s   closeds   inactives   open)   parityrv      statusr#   ru   )		branchmapiterbranchesr(   sortedrW   rR   r{   r   ry   )r   counttaghstipclosedr   statusheadsr`   parityrK   sortkeytipss           r0   entrieszbranchentries.<locals>.entriesR  s&      	1(,(8(8(E(E(G(G 1 1$RfT#Y/0000!$GTBBB 	 	KCqyyUe^^QJE !"5(($ <<::<<!     	 	r2   )r   r   r   r   )rK   stripecountr`   r   r   r   r   r   s   ` ` @@@@r0   branchentriesr   L  st    DJJLLE{##F77G         . (111r2   c                     |                     d          }t          j        | j        d          }t          j        | j        d||          S )Nr4   F)realfsr2   )auditor)lstripr   pathauditorroot	canonpath)rK   r7   r   s      r0   	cleanpathr   l  sF    ;;tD"49U;;;GdidGDDDDr2   c                     d}d|j         v r5|j         d         }|                    d          }|dk    r||dz   d          }t          j        | |          S )Nr[   r#      :r5   r   r   findr   	revsymbolrK   r   changeidiposs       r0   r   r   r  s_    H#,<(}}T""2::-HT8,,,r2   c                     d|j         v rG|j         d         }|                    d          }|dk    r|d |         }t          j        | |          S d S )Nr#   r   r5   r   r   s       r0   basechangectxr   }  sZ    #,<(}}T""2::H$T84444r2   c                    d|j         vrt          t          d          t          | |j         d                   }d|j         v r|j         d         }n,d|j         v r|j         d         }nt          t          d          	 t	          j        | |          |         }n,# t          j        $ r |                     ||          }Y nw xY w|S )Nrw   s   file not givenr#   s   filenodes   node or filenode not given)fileid)	r   r	   r   r   r   r   r   	RepoErrorfilectx)rK   r   r7   r   r   s        r0   r   r     s    cl""N,=>>>T3<011D#,<(		$	$<,N,IJJJ3 x006? 3 3 3||D|223 Ks   >B &CCc                    | j                             d          }|sd S t          |          dk    rt          t          d          	 t          t          |d                             dd                    \  }}n## t          $ r t          t          d          w xY w	 t          j
        ||          S # t          j        $ r,}t          t          t          j        |                    d }~ww xY w)Ns	   lineranger   s   redundant linerange parameterr   r   s   invalid linerange parameter)r   getallr   r	   r
   mapintsplit
ValueErrorr   processlineranger   
ParseErrorr   bytestr)r   	linerangefromlinetolineexcs        r0   r  r    s   ##L11I t
9~~,.NOOONsIaL$6$6tQ$?$?@@&& N N N,.LMMMNE$Xv666 E E E,h.>s.C.CDDDEs$   2A; ; BB4 4C/'C**C/c                     d| dz   |fz  S )Ns   %d:%dr   rA   )r  r  s     r0   formatlineranger    s    x!|V,,,r2   c              #      K    | j         |d          t          j        | |          }|                    | |          D ]*}t	          fd|d         D                       |d<   |V  +d S )N   repoc              3   (   K   | ]}|         V  d S rV   rA   )r   	successorrK   s     r0   	<genexpr>z&_succsandmarkersgen.<locals>.<genexpr>  s8       (
 (
 )DO(
 (
 (
 (
 (
 (
r2   s
   successors)resourcer   showsuccsandmarkerstovaluer   )r   mappingitemmappingsr   rK   s       @r0   _succsandmarkersgenr    s      7GW--D1'7CCL$$Wg66  ' (
 (
 (
 (
-1--@(
 (
 (
 
 
] 



	 r2   c                 :    t          j        t          |f          S Nr   )r   r   r  r   r  s     r0   succsandmarkersr    s    ()<G:NNNNr2   r     ctxc              #      K    | j         |d          } | j         |d          }t          j        ||          }|D ]3}|                    d          rt	          |d                   |d<   |V  4d S )Nr  r  s   divergentnodes)r  r   whyunstabler   r   )r   r  rK   r   r   entrys         r0   _whyunstablegenr    s      7GW--D
'
7F
+
+C!$,,G  99&'' 	K'07H1I'J'JE#$ r2   c                 :    t          j        t          |f          S r  )r   r   r  r  s     r0   r  r    s    (zJJJJr2   c                    t          j                  }i dd                                dt          |          d                                d                                d                                d                                d                                d		                                d
t          dt          j                                        d          dt          dt                    dt!          |           dt#          |           dt%          | |          dt'          | |          fdfddS )Nr  rt   r#   s   authors   descru   s   extras   phases   obsoletes   succsandmarkerss   instabilitiess   instabilityr   s   whyunstablerv   s   inbranchs   branchess   tagss	   bookmarksc                 "    t                    S rV   r   r   r  r   s     r0   r   zcommonentry.<locals>.<lambda>  s    GCLL r2   c                 "    t                    S rV   r   r$  s     r0   r   zcommonentry.<locals>.<lambda>  s    8C== r2   )   parent   child)r   binnoderY   r   rx   rz   ry   extraphasestrobsoleter  r   r   instabilitiesr  r   r   r   r   r   )rK   r   rW   s    ` r0   commonentryr.    s   ?3D 		
 			 	T 	388:: 	"" 	 	#))++ 	#,,.. 	S\\^^ 	O 	,1n
 
 
" 	#$ 	&s++%& 	\$,,'( 	^D#..)* 	dD))+, 	'd33-. 988888881   r2   c                 F   | j         }                                t          j                  }t	          |d|          }t                                          || j                  }t          |          }|	                    fdfdfd||d           |S )zObtain a dictionary to be used for entries in a changelist.

    This function is called when producing items for the "entries" list passed
    to the "shortlog" and "changelog" templates.
       changelogtagc                 "    t                    S rV   r#  r$  s     r0   r   z!changelistentry.<locals>.<lambda>  s    GCLL r2   c                 *    t          dz
            S Nr   r#  r   r  r   rY   s     r0   r   z!changelistentry.<locals>.<lambda>   s    S1W0E0E r2   c                 *    t          dz             S r3  r&  r4  s     r0   r   z!changelistentry.<locals>.<lambda>  s    xS1W/E/E r2   )s
   allparentsr'  r(  r0  s   files)
rK   rY   r   r)  r   listfilediffsfilesmaxfilesr.  update)webr   rK   nshowtagsr7  r  rY   s    `     @r0   changelistentryr=    s     8D
''))CAt_a00H#))++q#,77Ec""E	LL@@@@EEEEEEEEEE%	
 	
   Lr2   c              #      K   | j         }d}|D ]<}||k    r dS |dz  }t          | ||                   }t          |          |d<   |V  =dS )z2Emit up to N records for an iterable of revisions.r   r   r   N)rK   r=  rR   )r:  revsmaxcountparityfnrK   r   rY   r  s           r0   changelistentriesrB  	  st      8DE 	 	HEE
T#Y//>>i	 	r2   c                     d| j         v rt          j        | j         d                   S t          t	          j        |                    S )Nr#   )r   r   	revescaper   r   r)  )r   r   s     r0   symrevorshortnoderE    s?    #,(g)>???W_S))***r2   c           
   #   H  K   t          |          }|                                }t          |                                          D ]Z\  }}||vrd}n	||v rd}nd}|dk    rdnd} | j        ||                                ||dz   t          |          |d          V  [d S )Ns   removeds   addeds   modifieds
   filenolinks   filenodelinkr   )r#   rw      blocknor   r   )r   
filesadded	enumerater7  processr   rR   )	r   r   r   r   rH  blocknorb   r   templates	            r0   _listfilesgenrM  !  s      {##F!!J		,, 
 

C<<FF*__FF F$*j$8$8==ogo#aK<<! 	
 	
 		
 		
 		
 		

 
r2   c                   
 t          | j        dt          j        |                    }t	          | j        dt          j        |                    }t          |          }t          | j        | j                  }||                                }| 	                    dd          }d| j        j
        v r| j        j
        d         }t          | ||d|          }t          | j                  }t          | j        j        ||          
t!          |
|          }	t#          d	|t%          | j        |          |                                |||t)          j        t,          || j        f          
fd|	|                     |                                          d
t1          j        t5          | j        |                    S )
zBObtain a dictionary to be used to render the "changeset" template.s   changesettags   changesetbookmarkNr   s   styler   c                 "    t                    S rV   )diffsummary)r   r  diffstatsgens     r0   r   z changesetentry.<locals>.<lambda>Y  s    [-F-F r2   )
diffsymrevbasenodechangesettagchangesetbookmarkchangesetbranchr7  rP  diffstatr-   rA   )r   rK   r   r)  r   r   r   r   p1configr   diffsr   r   diffstatgenr   rX  dictrE  r   r   mappedgeneratorrM  r1   r   	strkwargsr.  )r:  r   r<  showbookmarks
showbranchbasectxstylerR  r   	diffstatsrQ  s             @r0   changesetentryre  8  s    sx'/#2F2FGGH &(<(< M %S))JCHcg..G&&((JJvx((E37### *c7D%00Ds''Fsx{C99LlF33I  #..'"*co 6
 
 
 GFFF++  
[377
8
8  r2   c              #      K   |d |         D ]%} | j         dt          |          |d          V  &t          |          |k    r | j         di           V  d S d S )Ns   filedifflink)r#   rw   s   fileellipses)rJ  r   r   )r   r7  rW   maxrb   s        r0   _listfilediffsgenrh  `  s      4C4[ Q QgooTQ/O/OPPPPPP
5zzCgoor2222222 r2   c                 >    t          j        t          | ||f          S r  )r   r^  rh  )r7  rW   rg  s      r0   r6  r6  g  s(    'c 2   r2   c           	   #     K   t          |d          D ]w\  }}d||fz  }|                    d          rd}n2|                    d          rd}n|                    d          rd}nd	} | j        ||||d
|z  z   d|z  d          V  xd S )Nr   s   %d.%d   +s   difflineplus   -s   difflineminus   @s
   difflineats   difflines   l%ss   % 8s)s   lines   lineno   lineids
   linenumber)rI  
startswithrJ  )r   linesrK  lineidprefixlinenol
difflinenoltypes           r0   _prettyprintdifflinesrv  m  s      ua(( 
 
	& 11
<< 	 #EE\\$ 	 $EE\\$ 	 !EEEgo!'&:*==&3	 
 
 	
 	
 	
 	

 
r2   c	              #   <  K   |rt          j        |          }	nt          j                    }	t          j        |j        d          }
t          |          }t          j        ||||	|
          }t          |d          D ]\  }\  }}}}|dk    r
|dd          }d |D             }|D ]=\  }}|!||\  }}}}t          j
        ||f|          s(|                    |           >|r3t          j        t          |||f          }t          |          ||dV  d S )	NTr    optsr   s   rawc                     g | ]}|d z   S )   
rA   )r   hs     r0   r   z_diffsgen.<locals>.<listcomp>  s    +++qU+++r2   r   )r   rG     lines)r   exactalwaysr   r   r   r   	diffhunksrI  r   hunkinrangeextendr   r^  rv  rR   )r   rK   r   rb  r7  rc  r   r  rq  mr   r   r  rK  fctx1fctx2headerhunksrp  	hunkrange	hunkliness1l1s2l2rs  s                             r0   	_diffsgenr    sv       KLNN~dg666H{##FgsAHEEEI2;Iq2I2I  ..%F??ABBZF++F+++$) 	$ 	$ Iy$)>!*BB("b9== LL#### 	,%UG\,J  A  <<#     r2   r2   c                 b    | j         ||||| j        ||f}t          j        t          |d          S )Ns	   diffblockr   )rK   r   r   r   r  )r:  r   rb  r7  rc  r  rq  r   s           r0   r[  r[    sH    	D (<   r2   c           	      z    |rd|z  pd}||rd|z  pdz  }|rd|z  nd}|rd|z  nd}| ||d|z  |pd|d|z  |pddS )Ns   l%dr2   s   r%ds   %ds   % 6s)r"   rn  s
   leftlinenos   leftlinenumbers   leftlines   rightlinenos   rightlinenumbers	   rightlinerA   )type
leftlinenoleftlinerightlineno	rightlinelineidllnorlnos           r0   	_compliner    s    1Vj08SF
k4v3;;F!+45:D"-65;3D!"T>_##dN&3	 	 	r2   c              #     K   |D ]\  }}}}}t          j        |          }||z
  }	||z
  }
t          |	|
          }t          |          D ]6}t	          |||z   dz   |||z            ||z   dz   |||z                      V  7|	|
k    r6t          ||z   |          D ]!}t	          ||dz   ||         d d           V  "|
|	k    r5t          ||z   |          D ]!}t	          |d d |dz   ||                   V  "d S )Nr   )r  r  r  r  r  )r   sysbytesminranger  )r   	leftlines
rightlinesopcodesr  llolhirlorhilen1len2r   is                r0   _getcompblockgenr    s     $+   c3S &&SySyD$u 	 	A7Q;"37+!GaK$S1W-       $;;3;,,   1u&q\ $"       D[[3;,,  #! !A(m      1 r2   c                 D    | ||f}t          j        t          |d          S )Ns   comparisonliner   )r   r   r  )r  r  r  r   s       r0   _getcompblockr    s0    z7+D(t*;   r2   c              #      K   t          j        d||          }|dk     r+t          |||                                          }d|iV  dS |                    |          D ]}t          |||          }d|iV  dS )z>Generator function that provides side-by-side comparison data.Nr   r}  )r;  )difflibSequenceMatcherr  get_opcodesget_grouped_opcodes)r   
contextnumr  r  r~   rs  ocs          r0   _comparegenr    s      i<<AA~~)ZAAm''*'55 	  	 BiR88AQ-	  	 r2   c                 D    | ||f}t          j        t          |d          S )Ns   comparisonblockr   )r   r   r  )r  r  r  r   s       r0   comparer    s0    	:.D($%7   r2   c              #      K   t          j        | ddi          }t          j        t          j        |                    ||                              }t          j        |          \  }}}}}		 ||||||	fV  )z3Generator function that provides the diffstat data.s   noprefixFrx  )r   r   diffstatdatar   	iterlinesrR  diffstatsum)
r   r   rb  r   statsmaxnamemaxtotaladdtotalremovetotalbinarys
             r0   r\  r\  	  s       ~b;"677Ht~chhwXh.N.NOOPPE7<7H7O7O4GXxfFWh+vEEEEFr2   c                 r    t          |           \  }}}}}}t          d          t          |          ||fz  S )z#Return a short summary of the diff.s5    %d files changed, %d insertions(+), %d deletions(-)
)rR   r   r   )statgenr  r  r  r  r  r  s          r0   rP  rP    sH     ?C7mm;E7HhVFGGE

K  r2   c              #   >  K   t          |          \  }}}}}|                                }	fd}
d}|D ]e\  }}}}||	v rdnd}||z   }|dz  } | j        ||                                ||| |
|           |
|          t          |          d          V  fd S )Nc                 >    dk    rdS t          |           z  dz  S )Nr   d   )float)r  r  s    r0   pctz_diffstattmplgen.<locals>.pct"  s'    q==1a8#s**r2   r   s   diffstatlinks   diffstatnolinkr   )r#   rw   s   filenos   totals   addpcts	   removepctr   )rR   r7  rJ  r   )r   r   r  r   r  r  r  r  r  r7  r  filenofilenameaddsremovesisbinaryrL  totalr  s                     @r0   _diffstattmplgenr    s      >B7mm;E7HhVIIKKE+ + + + +
 F-2 
 
)$&.%&7&7??=Nw!go!!3t99!c'll<< 
 
 	
 	
 	
 	
	
 
r2   c                 B    | ||f}t          j        t          |          S )z5Return a diffstat template for each file in the diff.r   )r   r^  r  )r   r  r   r   s       r0   rX  rX  :  s%    &!D'(8tDDDDr2   c                   d    e Zd ZddZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd ZdS )sessionvars   ?c                 "    || _         || _        d S rV   )_start_vars)rJ   varsstarts      r0   rL   zsessionvars.__init__A  s    


r2   c                     | j         |         S rV   r  )rJ   r   s     r0   __getitem__zsessionvars.__getitem__E  s    z#r2   c                     || j         |<   d S rV   r  )rJ   r   values      r0   __setitem__zsessionvars.__setitem__H  s    
3r2   c                 Z    t          t          j        | j                  | j                  S rV   )r  copyr  r  rO   s    r0   __copy__zsessionvars.__copy__K  s     49TZ00$+>>>r2   c                 @    t          j        |||          }|| j        v S rV   )r   unwrapvaluer  )rJ   r   r  r   s       r0   containszsessionvars.containsN  s#    '$??tz!!r2   c                 b    t          j        |||          }| j                            |          S rV   )r   r  r  r   )rJ   r   r  r   s       r0   	getmemberzsessionvars.getmemberR  s*    &w==z~~c"""r2   c                 D    t          j        t          d                    Ns   not comparabler   r  r   rJ   r   r  s      r0   getminzsessionvars.getminV      q!233444r2   c                 D    t          j        t          d                    r  r  r  s      r0   getmaxzsessionvars.getmaxY  r  r2   c                 D    t          j        t          d                    )Ns   not filterabler  )rJ   r   r  selects       r0   filterzsessionvars.filter\  s    q!233444r2   c              #      K   | j         }t          | j                                                  D ]!\  }}|t	          j        |          |dV  d}"d S )N)r   s   values	   separator   &)r  r   r  r&   r   r  )rJ   r   	separatorr   r  s        r0   itermapszsessionvars.itermaps`  sv      K	 !1!1!3!344 	 	JC"*511'    
 II	 	r2   c                 D    t          j        t          d                    )Ns    not displayable without templater  )rJ   r   r  seps       r0   joinzsessionvars.joinj  s    q!DEEFFFr2   c                 0    |                      ||d          S Nr2   )r  r  s      r0   showzsessionvars.shown  s    yy'3///r2   c                 *    t          | j                  S rV   )boolr  r  s      r0   toboolzsessionvars.toboolq  s    DJr2   c                     | j         S rV   r  r  s      r0   r  zsessionvars.tovaluet  s
    zr2   N)r  )rg   rh   ri   rL   r  r  r  r  r  r  r  r  r  r  r  r  r  rA   r2   r0   r  r  @  s                  ? ? ?" " "# # #5 5 55 5 55 5 5  G G G0 0 0         r2   r  c                       e Zd Zd ZdS )wsgiuic                     dS )NP   rA   rO   s    r0   	termwidthzwsgiui.termwidthz  s    rr2   N)rg   rh   ri   r  rA   r2   r0   r  r  x  s#            r2   r  c                    g }| j                             d          }|| j                             d          z  }|D ]\  }}|dd         }t          j        |          }t	          j        d|||fz  |          }|s-| j                             t          d          ||fz             nt	          j        d|z            }|	                    | |j
        d                    }	|	                    | |j
        d                    }
 |j
        d          }d	}|r>t          j        |                                          D ]}|t          j        |         z  }	 t	          j        |	|          }	|                    |	|
f           N# t          j        $ r0 | j                             t          d
          ||	fz             Y w xY w|S )Ns   websubs   interhgr   r   s1   ^s%s(.+)(?:(?<=\\\\)|(?<!\\))%s(.*)%s([ilmsux])*$s#   websub: invalid pattern for %s: %s
s   (?<!\\)\\%sr@   r   s"   websub: invalid regexp for %s: %s
)r   configitemsr   reescaperer   warnr   compilesubgroupr   sysstrupper__dict__r(   r   )rK   websubtable
websubdefsr   patternunescdelimr   delim_reregexpformatflaginflagsflags                 r0   
getwebsubsr  ~  s   K$$Y//J$'%%j111J" % %W!#E**
 AeU#$
 

  	GLL9::c7^K    :o566e[U[^^44e[U[^^44 Q 	+ 77 + +T**	Z..F/0000x 	 	 	GLL899S&MI    	 s   ,F

;G	G	c                 X    t          j        | |i           t          j        |          z   S rV   )r   getgraphnodecurrentgetgraphnodesymbol)rK   r   s     r0   getgraphnoder    s1    )c2 %c**+ +r2   rV   )NN)r   r  )]r  r  r6   r  i18nr   rW   r   r   r   r   commonr	   r
   r   r    r   r   r   r   r   r   r   r   r   r   r   r   r   uimodr   utilsr   sortdictr%   r1   r:   rD   rF   rl   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  	_requiresr  r  r.  r=  rB  rE  rM  re  rh  r6  rv  r  r[  r  r  r  r  r  r\  rP  r  rX  wrappedr  r  r  r  rA   r2   r0   <module>r%     s     				 				                                                                $      t} . . . .(      Q
 Q
 Q
 Q
 Q
 Q
 Q
 Q
hD D D D D D D D$  E E E E  &9 9 9
* * * *+ + + +( ( (F F FK K K; ; ;	; 	; 	;; ; ;  
L L L LL L L L2 2 2 2@E E E- - -    $E E E - - -  O O O
 %f-   K K K !&)   <  2  "+ + +
 
 
.% % %P3 3 3  
 
 
,& & &R      "  D  	  	  	   F F F  
 
 
8E E E5 5 5 5 5,& 5 5 5p    UX   + + +\+ + + + +r2   