
    q&fk                        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
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jB                  d	      Z"dGd
Z#d Z$dGdZ% G d d      Z& G d de&      Z'd Z(dHdZ)d Z*d Z+dGdZ,dGdZ-d Z.d Z/d Z0d Z1d Z2d Z3d Z4dGdZ5dGdZ6dId Z7d! Z8d" Z9d# Z:d$ Z;d% Z<d& Z=d' Z>d( Z?d)d*he?_@        d+ ZAd, ZBd)d*heB_@        d- ZCd. ZDd/ ZEd0 ZFd1 ZGd2 ZHd3 ZId4 ZJd5 ZKd6 ZLdJd7ZMd8 ZNd9 ZOd: ZPd; ZQd< ZRd= ZSd> ZTd? ZUd@ ZV G dA dBej                        ZX G dC dDej8                        ZYdE ZZdF Z[y)K    N   )_)hexshort   )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                     | j                  ddd      }g }t        j                         D ]:  \  }}||v s| j                  dd|z   d      s"|j	                  ||d   ||d       < t        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archivelistr0   6   s    mmF$4mEGH!'') 	T'>R]]HsNd + 
 OO "&q'#		 ##H--    c                     | dd dk7  rd| z   } | dd  dk(  r| d d } t         j                  j                  |       }|dk(  ry|dz   S )Nr   r      /)ospathdirname)pups     r/   r9   r9   J   sV    1v~1Hv~crF		B	Tz9r1   c              #      K   |r2| |dk\  r|dk  rd}| | dkD  sJ |dkD  sJ | |k  r| dz  } | |k  r	 d| z   d| z   | dz  } w)N   (   2   r   
   r       )step	firststeps     r/   _navseqrC   U   sz     ?yBIOaxx1}}iBJD i
$h$h
 s
   4AAc                   .    e Zd Zd Zd ZeZd Zd Zd Zy)revnavc                 &    |j                   | _        y)zUNavigation generation object

        :repo: repo object we generate nav for
        N)	changelog_revlog)selfrepos     r/   __init__zrevnav.__init__f   s     ~~r1   c                 &    | j                         duS )z,return True if any revision to navigate overN)_firstrI   s    r/   __nonzero__zrevnav.__nonzero__n   s    {{}D((r1   c                 ^    	 t        t        | j                              S # t        $ r Y yw xY w)z1return the minimum non-filtered changeset or NoneN)nextiterrH   StopIterationrN   s    r/   rM   zrevnav._firstt   s-    	T\\*++ 		s     	,,c                 J    t        | j                  j                  |            S N)r   rH   noderI   revs     r/   r   z
revnav.hex{   s    4<<$$S)**r1   c                 P   | s?t        j                  t        j                  g       t        j                  g       dg      S g }t        d|      D ]1  }||kD  r n*|j                  ||z          |j                  ||z
         3 |j	                          | j                         }d|z  | j                  |      dg}g }|D ]  }	|	| j                  vr||	cxk  r|k  r5n n2|j                  dt        |	|z
        z  | j                  |	      d       d|	cxk  r|k  s^n a|j                  dt        |	|z
        z  | j                  |	      d        |j                  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(   rC   r'   sortrM   r   rH   abs)
rI   pospagelenlimittargetsffirst	navbeforenavafterrX   s
             r/   genz
revnav.gen~   s    ++ $0#;#;B#?".":":2">  G$ 	$A5yNN37#NN37#		$
 	 '%$((5/JK	 
	C$,,&S 5 %C#I6#O 3}}  %C#I6#O
	 	6F;< ''  ,77	B*66x@
 	
r1   N)	__name__
__module____qualname__rK   rO   __bool__rM   r   re   r@   r1   r/   rE   rE   e   s"    &) H+8
r1   rE   c                       e Zd Zd Zd Zy)
filerevnavc                 n    |j                         j                  | _        |j                  |      | _        y)zNavigation generation object

        :repo: repo object we generate nav for
        :path: path of the file we generate nav for
        N)
unfilteredrG   
_changelogfilerH   )rI   rJ   r6   s      r/   rK   zfilerevnav.__init__   s'     //+55yyr1   c                 |    t        | j                  j                  | j                  j	                  |                  S rU   )r   rn   rV   rH   linkrevrW   s     r/   r   zfilerevnav.hex   s+    4??''(<(<S(ABCCr1   N)rf   rg   rh   rK   r   r@   r1   r/   rk   rk      s    	'Dr1   rk   c              #     K   |D ]  }|j                         |j                         |j                         |j                         |j	                         |j                         d}t        |d      r|j                         |d<   |  y w)N)r"      revs   user   dates   description   branchr6      file)r   rX   userdatedescriptionbranchhasattrr6   )r   ctxssds       r/   _ctxsgenr      sr      UUWEEGVVXVVXMMOxxz
 1fAgJs   B	Bc                    | g } | D cg c]0  }|j                         |j                         j                  k7  s/|2 } }t        |       dk(  r| d   j	                         |k(  rg } t        j                  t        | f      S c c}w )Nr   r   args)rV   rJ   nullidlenrX   r   mappinggeneratorr   )siblingshiderevr}   s      r/   	_siblingsr      su    #Caqvvx1668??'BCHC
8}hqkoo/7:((DD Ds
   0BBc                     t        j                  |d|d      }dD ]I  \  }}| j                  j                  |      }|$t	        j
                  |      }t        ||||nd       K |S )NT)r    section
whitespace))s   ignorewsignorews)s   ignorewsamountignorewsamount)s   ignorewseolignorewseol)s   ignoreblanklinesignoreblanklines)r   difffeatureoptsqsparamsgetr   	parseboolsetattr)reqr   r   diffoptskbksvs          r/   r   r      sv    ''
dGH 	@B LLR =$$Q'AHbq}!$?	@ Or1   c                 B    t        | |d      }|j                  d|      S )Ns   annotateT)followr   )r   annotate)r   fctxr   r   s       r/   r   r      s#    sB4H==x=88r1   c                    t        | t        j                        rO| j                         }| j	                         j                         |k7  rt        | j                         |   g|      S t        | j                         |      S rU   )	
isinstancer   basefilectxintrorev	changectxrX   r   rJ   parents)ctxhider   s      r/   r   r      sb    #w**+<<>==? H,chhj23T::S[[]D))r1   c                 6    t        | j                         |      S rU   )r   children)r   r   s     r/   r   r     s    S\\^T**r1   c                     | j                         }|r(t        j                  |d   t        |d         dg      S t        j                  g       S )Nr   r   )rv   r"   )renamedr   r(   r   )r   rs     r/   
renamelinkr     sF    A''1Q4#ad))L(MNN##B''r1   c                 N    t        j                  | j                  |      d      S N   namename)r   
hybridlistnodetagsrJ   rV   s     r/   nodetagsdictr     s    ""4==#6WEEr1   c                 N    t        j                  | j                  |      d      S r   )r   r   nodebookmarksr   s     r/   nodebookmarksdictr     s     ""4#5#5d#;'JJr1   c                     g }|j                         }	 | j                  |      }||j	                         k(  r|j                  |       t        j                  |d      S # t        j                  $ r d }Y Rw xY wr   rz   	branchtipr   RepoLookupErrorrV   r'   r   r   rJ   r   branchesrz   
branchnodes        r/   nodebranchdictr     sp    HZZ\F^^F+
 SXXZ""8'::	    
s   A   A87A8c                     g }|j                         }	 | j                  |      }|dk7  r$||j	                         k7  r|j                  |       t        j                  |d      S # t        j                  $ r d }Y Ww xY wNs   defaultr   r   r   r   s        r/   nodeinbranchr   $  sw    HZZ\F^^F+
 
chhj 8""8'::	    
s   A% %A=<A=c                     g }| j                         }|dk7  r|j                  |       t        j                  |d      S r   )rz   r'   r   r   )r   r   rz   s      r/   nodebranchnodefaultr   0  s9    HZZ\F""8'::r1   c              #   2   K    ||      D ]  }||i 
 y wrU   r@   )r   ra   rV   r   ts        r/   _nodenamesgenr   8  s"     tW Qis   c                 t    || j                   }| j                  |df}t        j                  t        ||      S )Ns   tagr   r   )r   r   r   r   r   rJ   t1rV   r   s       r/   showtagr   =  s5    |{{MM4(D((TKKr1   c                 t    || j                   }| j                  |df}t        j                  t        ||      S )Ns   bookmarkr   )r   r   r   r   r   r   s       r/   showbookmarkr   D  s7    |{{k2D((TKKr1   c                      g  j                         t        |      d  fd}t        j                  |      S )Nc                 4    | d    | d   j                         fS )Nr   r   )rX   )items    r/   <lambda>zbranchentries.<locals>.<lambda>O  s    QKa7 r1   c              3     K   d}s>j                         j                         D ]  \  }}}}j                  |   |f        t        d      D ]o  \  }}	dkD  r|	k\  r y |dz  }|rd}n|j	                         vrd}nd}t        
      |j                         ||j                         |j                         d q y w)	Nr   T)keyreverser   s   closeds   inactives   open)   parityru      statusr"   rt   )		branchmapiterbranchesr'   sortedrV   rQ   rz   r   rx   )r   counttaghstipclosedr   statusheadsr_   parityrJ   sortkeytipss           r/   entrieszbranchentries.<locals>.entriesQ  s     (,(8(E(E(G 1$RfT#Y/01!$GTB 	KCqyUe^QJE"5($ <::<! 	s   CC)r   r   r   r   )rJ   stripecountr_   r   r   r   r   r   s   ` ` @@@@r/   branchentriesr   K  s?    DJJLE{#F7G . ((11r1   c                     |j                  d      }t        j                  | j                  d      }t        j                  | j                  d||      S )Nr3   F)realfsr1   )auditor)lstripr   pathauditorroot	canonpath)rJ   r6   r   s      r/   	cleanpathr   k  sA    ;;tD""499U;GdiidGDDr1   c                     d}d|j                   v r-|j                   d   }|j                  d      }|dk7  r||dz   d  }t        j                  | |      S )NrZ   r"      :r4   r   r   findr   	revsymbolrJ   r   changeidiposs       r/   r   r   q  sY    H#,,<<(}}T"2:-HT8,,r1   c                     d|j                   v r@|j                   d   }|j                  d      }|dk7  r|d | }t        j                  | |      S y )Nr"   r   r4   r   r   s       r/   basechangectxr   |  sR    #,,<<(}}T"2:H$$T844r1   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
                  | |      |   }|S # t        j                  $ r | j                  ||      }Y |S w xY w)Nrv   s   file not givenr"   s   filenodes   node or filenode not given)fileid)	r   r   r
   r   r   r   r   	RepoErrorfilectx)rJ   r   r6   r   r   s        r/   r   r     s    cll"N,=>>T3<<01D#,,<<(		$<<,N,IJJ3  x06 K ?? 3||D|2K3s   B   &C
	C
c                    | j                   j                  d      }|sy t        |      dkD  rt        t        d      	 t        t        |d   j                  dd            \  }}	 t        j                  ||      S # t        $ r t        t        d      w xY w# 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        r/   r  r    s    ##L1I
9~,.NOONsIaL$6$6tQ$?@&E$$Xv66  N,.LMMN  E,h.>.>s.CDDEs#   &A; %B ;BC+#CCc                     d| dz   |fz  S )Ns   %d:%dr   r@   )r  r	  s     r/   formatlineranger    s    x!|V,,,r1   c              #      K    | j                   |d      t        j                  | |      }|j                  | |      D ]   }t	        fd|d   D              |d<   | " y w)N   repoc              3   (   K   | ]	  }|     y wrU   r@   ).0	successorrJ   s     r/   	<genexpr>z&_succsandmarkersgen.<locals>.<genexpr>  s      (
 )DO(
s   s
   successors)resourcer   showsuccsandmarkerstovaluer   )r   mappingitemmappingsr   rJ   s       @r/   _succsandmarkersgenr    sq     7GW-D11'7CL$$Wg6 ' (
-1--@(
 
] 
	s   A A#c                 :    t        j                  t        |f      S Nr   )r   r   r  r   r  s     r/   succsandmarkersr    s    (()<G:NNr1   r     ctxc              #      K    | j                   |d      } | j                   |d      }t        j                  ||      }|D ](  }|j                  d      rt	        |d         |d<   | * y w)Nr  r  s   divergentnodes)r  r   whyunstabler   r   )r   r  rJ   r   r   entrys         r/   _whyunstablegenr!    sw     7GW-D
'

7F
+C!!$,G 99&''07H1I'JE#$s   A+A-c                 :    t        j                  t        |f      S r  )r   r   r!  r  s     r/   r  r    s    ((zJJr1   c                 <   t        j                        }i ddj                         dt        |      dj	                         dj                         dj                         dj                         dj                         d	j                         d
t        dt        j                  j                         d      dt        dt              dt!        |       dt#        |       dt%        | |      dt'        | |      fdfddS )Nr  rs   r"   s   authors   descrt   s   extras   phases   obsoletes   succsandmarkerss   instabilitiess   instabilityr   s   whyunstableru   s   inbranchs   branchess   tagss	   bookmarksc                     t              S rU   r   r   r  r   s     r/   r   zcommonentry.<locals>.<lambda>  s    GCL r1   c                     t              S rU   r   r&  s     r/   r   zcommonentry.<locals>.<lambda>  s    8C= r1   )   parent   child)r   binnoderX   r   rw   ry   rx   extraphasestrobsoleter  r   r   instabilitiesr  r   r   r   r   r   )rJ   r   rV   s    ` r/   commonentryr0    s_   ??3D 		
 		 	T 	388: 	" 	 	#))+ 	#,,. 	S\\^ 	O 	,11n
" 	#$ 	&s+%& 	\$,'( 	^D#.)* 	dD)+, 	'd3-. 981 r1   c                 ,   | j                   }j                         t        j                        }t	        |d|      }t        j                         || j                        }t        |      }|j                  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 rU   r%  r&  s     r/   r   z!changelistentry.<locals>.<lambda>  s    GCL r1   c                 "    t        dz
        S Nr   r%  r   r  r   rX   s     r/   r   z!changelistentry.<locals>.<lambda>  s    S1W0E r1   c                 "    t        dz         S r5  r(  r6  s     r/   r   z!changelistentry.<locals>.<lambda>   s    xS1W/E r1   )s
   allparentsr)  r*  r2  s   files)
rJ   rX   r   r+  r   listfilediffsfilesmaxfilesr0  update)webr   rJ   nshowtagsr9  r   rX   s    `     @r/   changelistentryr?    s     88D
'')CAt_a0H#))+q#,,7Ec"E	LL@EE%	
 Lr1   c              #      K   | j                   }d}|D ]/  }||k\  r y|dz  }t        | ||         }t        |      |d<   | 1 yw)z2Emit up to N records for an iterable of revisions.r   r   r   N)rJ   r?  rQ   )r<  revsmaxcountparityfnrJ   r   rX   r   s           r/   changelistentriesrD    sZ     88DE 	H
T#Y/>i	s   AAc                     d| j                   v r"t        j                  | j                   d         S t        t	        j
                  |            S )Nr"   )r   r   	revescaper   r   r+  )r   r   s     r/   symrevorshortnoderG    s<    #,,((g)>??W__S)**r1   c           
   #      K   t        |      }|j                         }t        |j                               D ]S  \  }}||vrd}n	||v rd}nd}|dk(  rdnd} | j                  ||j                         ||dz   t        |      |d       U y w)Ns   removeds   addeds   modifieds
   filenolinks   filenodelinkr   )r"   rv      blocknor   r   )r   
filesadded	enumerater9  processr   rQ   )	r   r   r   r   rJ  blocknora   r   templates	            r/   _listfilesgenrO     s     {#F!J		, 

C<F*_F F$*j$8=ogoo#aK<!	
 		

s   BBc                   
 t        | j                  dt        j                  |            }t	        | j                  dt        j                  |            }t        |      }t        | j                  | j                        }||j                         }| j                  dd      }d| j                  j                  v r| j                  j                  d   }t        | ||d|      }t        | j                        }t        | j                  j                  ||      
t!        |
|      }	t#        d	|t%        | j                  |      |j'                         |||t)        j*                  t,        || j                  f      
fd|	| j/                  |j'                               d
t1        j2                  t5        | j                  |            S )
zBObtain a dictionary to be used to render the "changeset" template.s   changesettags   changesetbookmarkNr   s   styler   c                     t              S rU   )diffsummary)r   r  diffstatsgens     r/   r   z changesetentry.<locals>.<lambda>X  s    [-F r1   )
diffsymrevbasenodechangesettagchangesetbookmarkchangesetbranchr9  rR  diffstatr,   r@   )r   rJ   r   r+  r   r   r   r   p1configr   diffsr   r   diffstatgenr   rZ  dictrG  r   r   mappedgeneratorrO  r0   r   	strkwargsr0  )r<  r   r>  showbookmarks
showbranchbasectxstylerT  r   	diffstatsrS  s             @r/   changesetentryrg  7  su    sxx'//#2FGH &(<M %S)JCHHcgg.G&&(JJvx(E377###  *c7D%0Ds'Fsxx{{C9LlF3I  #.'"**coo 6
 G+ 

[37
8 r1   c              #      K   |d | D ]#  } | j                   dt        |      |d       % t        |      |kD  r | j                   di        y y w)Ns   filedifflink)r"   rv   s   fileellipses)rL  r   r   )r   r9  rV   maxra   s        r/   _listfilediffsgenrj  _  s]     4C[ QgoooTQ/OPPQ
5zCgooor22 s   AAc                 >    t        j                  t        | ||f      S r  )r   r`  rj  )r9  rV   ri  s      r/   r8  r8  f  s!    ''c 2 r1   c           	   #     K   t        |d      D ]m  \  }}d||fz  }|j                  d      rd}n*|j                  d      rd}n|j                  d      rd}nd	} | j                  ||||d
|z  z   d|z  d       o y w)Nr   s   %d.%d   +s   difflineplus   -s   difflineminus   @s
   difflineats   difflines   l%ss   % 8s)s   lines   lineno   lineids
   linenumber)rK  
startswithrL  )r   linesrM  lineidprefixlinenol
difflinenoltypes           r/   _prettyprintdifflinesrx  l  s     ua( 
	& 11
<<#E\\$$E\\$!EEgoo!'&:*==&3	
 	

s   A>B c	              #   F  K   |rt        j                  |      }	nt        j                         }	t        j                  |j
                  d      }
t        |      }t        j                  ||||	|
      }t        |d      D ]  \  }\  }}}}|dk7  r|dd  }|D cg c]  }|dz   	 }}|D ]:  \  }}|"| |\  }}}}t        j                  ||f|      s*|j                  |       < |sit        j                  t        |||f      }t        |      ||d  y c c}w w)	NTr   optsr   s   raw   
r   )r   rI     lines)r   exactalwaysr   r   r   r   	diffhunksrK  r   hunkinrangeextendr   r`  rx  rQ   )r   rJ   r   rd  r9  re  r   r  rs  mr   r   r  rM  fctx1fctx2headerhunkshrr  	hunkrange	hunkliness1l1s2l2ru  s                              r/   	_diffsgenr    s3     KKLLN~~dgg6H{#FgsAHEI2;Iq2I ..%F?ABZF$*+qU++$) 	$ Iy$)>!*BB(("b9=LL#	$ ,,%UG\,JA  <#  ,s   BD!D&AD!*7D!c                 v    | j                   ||||| j                  ||f}t        j                  t        |d      S )Ns	   diffblockr   )rJ   r   r   r   r  )r<  r   rd  r9  re  r  rs  r   s           r/   r]  r]    sE    	D ((< r1   c           	          |xr d|z  xs d}||xr d|z  xs dz  }|rd|z  nd}|rd|z  nd}| ||d|z  |xs d|d|z  |xs ddS )Ns   l%dr1   s   r%ds   %ds   % 6s)r!   rp  s
   leftlinenos   leftlinenumbers   leftlines   rightlinenos   rightlinenumbers	   rightliner@   )type
leftlinenoleftlinerightlineno	rightlinelineidllnorlnos           r/   	_compliner    s~    1Vj08SF
k4v3;;F!+5:D"-5;3D!"T>_##dN&3	 	r1   c              #     K   |D ]  \  }}}}}t        j                  |      }||z
  }	||z
  }
t        |	|
      }t        |      D ],  }t	        |||z   dz   |||z      ||z   dz   |||z             . |	|
kD  r-t        ||z   |      D ]  }t	        ||dz   ||   d d         |
|	kD  st        ||z   |      D ]  }t	        |d d |dz   ||            y w)Nr   )r  r  r  r  r  )r   sysbytesminranger  )r   	leftlines
rightlinesopcodesr  llolhirlorhilen1len2r   is                r/   _getcompblockgenr    s,    $+  c3S  &SySyD$u 	A7Q;"37+!GaK$S1W- 	 $;3;,  1u&q\ $"  D[3;, #! !A(m /s   B(C+/Cc                 D    | ||f}t        j                  t        |d      S )Ns   comparisonliner   )r   r   r  )r  r  r  r   s       r/   _getcompblockr    s)    z7+D((t*; r1   c              #      K   t        j                  d||      }|dk  r"t        |||j                               }d|i y|j	                  |      D ]  }t        |||      }d|i  yw)z>Generator function that provides side-by-side comparison data.Nr   r}  )r=  )difflibSequenceMatcherr  get_opcodesget_grouped_opcodes)r   
contextnumr  r  r}   ru  ocs          r/   _comparegenr    st     i<AA~)ZAm''*'5 	 BiR8AQ-	 s   A*A,c                 D    | ||f}t        j                  t        |d      S )Ns   comparisonblockr   )r   r   r  )r  r  r  r   s       r/   comparer    s)    	:.D(($%7 r1   c              #      K   t        j                  | ddi      }t        j                  t        j                  |j                  ||                  }t        j                  |      \  }}}}}		 ||||||	f w)z3Generator function that provides the diffstat data.s   noprefixFrz  )r   r   diffstatdatar   	iterlinesrT  diffstatsum)
r   r   rd  r   statsmaxnamemaxtotaladdtotalremovetotalbinarys
             r/   r^  r^    sy      ~~b;"67Ht~~chhwXh.NOPE7<7H7H7O4GXxf
Wh+vEE s   A9A;c                 Z    t        |       \  }}}}}}t        d      t        |      ||fz  S )z#Return a short summary of the diff.s5    %d files changed, %d insertions(+), %d deletions(-)
)rQ   r   r   )statgenr  r  r  r  r  r  s          r/   rR  rR    sA     ?C7m;E7HhVFGE
K  r1   c              #     K   t        |      \  }}}}}|j                         }	fd}
d}|D ]Y  \  }}}}||	v rdnd}||z   }|dz  } | j                  ||j                         ||| |
|       |
|      t        |      d       [ y w)Nc                 2    dk(  ryt        |       z  dz  S )Nr   d   )float)r  r  s    r/   pctz_diffstattmplgen.<locals>.pct!  s!    q=a8#s**r1   r   s   diffstatlinks   diffstatnolinkr   )r"   rv   s   filenos   totals   addpcts	   removepctr   )rQ   r9  rL  r   )r   r   r  r   r  r  r  r  r  r9  r  filenofilenameaddsremovesisbinaryrN  totalr  s                     @r/   _diffstattmplgenr    s     >B7m;E7HhVIIKE+
 F-2 
)$&.%&7?=Nw!goo!!t9!'l<
 	
	
s   B	B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       r/   rZ  rZ  9  s"    &!D''(8tDDr1   c                   b    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y)sessionvarsc                      || _         || _        y rU   )_start_vars)rI   varsstarts      r/   rK   zsessionvars.__init__@  s    
r1   c                      | j                   |   S rU   r  )rI   r   s     r/   __getitem__zsessionvars.__getitem__D  s    zz#r1   c                 "    || j                   |<   y rU   r  )rI   r   values      r/   __setitem__zsessionvars.__setitem__G  s    

3r1   c                 h    t        t        j                  | j                        | j                        S rU   )r  copyr  r  rN   s    r/   __copy__zsessionvars.__copy__J  s     499TZZ0$++>>r1   c                 L    t        j                  |||      }|| j                  v S rU   )r   unwrapvaluer  )rI   r   r  r   s       r/   containszsessionvars.containsM  s%    ''$?tzz!!r1   c                 f    t        j                  |||      }| j                  j                  |      S rU   )r   r  r  r   )rI   r   r  r   s       r/   	getmemberzsessionvars.getmemberQ  s)    &&w=zz~~c""r1   c                 >    t        j                  t        d            Ns   not comparabler   r  r   rI   r   r  s      r/   getminzsessionvars.getminU      q!2344r1   c                 >    t        j                  t        d            r  r  r  s      r/   getmaxzsessionvars.getmaxX  r  r1   c                 >    t        j                  t        d            )Ns   not filterabler  )rI   r   r  selects       r/   filterzsessionvars.filter[  s    q!2344r1   c              #      K   | j                   }t        | j                  j                               D ]"  \  }}|t	        j
                  |      |d d}$ y w)N)r   s   values	   separator   &)r  r   r  r%   r   r  )rI   r   	separatorr   r  s        r/   itermapszsessionvars.itermaps_  sY     KK	 !1!1!34 	JC"**51' 
 I	s   AAc                 >    t        j                  t        d            )Ns    not displayable without templater  )rI   r   r  seps       r/   joinzsessionvars.joini  s    q!DEFFr1   c                 (    | j                  ||d      S Nr1   )r  r  s      r/   showzsessionvars.showm  s    yy'3//r1   c                 ,    t        | j                        S rU   )boolr  r  s      r/   toboolzsessionvars.toboolp  s    DJJr1   c                     | j                   S rU   r  r  s      r/   r  zsessionvars.tovalues  s    zzr1   N)   ?)rf   rg   rh   rK   r  r  r  r  r  r  r  r  r  r  r  r  r  r@   r1   r/   r  r  ?  sI     ?"#555G0 r1   r  c                       e Zd Zd Zy)wsgiuic                      y)NP   r@   rN   s    r/   	termwidthzwsgiui.termwidthy  s    r1   N)rf   rg   rh   r  r@   r1   r/   r  r  w  s    r1   r  c                    g }| j                   j                  d      }|| j                   j                  d      z  }|D ]B  \  }}|dd }t        j                  |      }t	        j
                  d|||fz  |      }|s*| j                   j                  t        d      ||fz         it	        j                  d|z        }|j                  | |j                  d            }	|j                  | |j                  d            }
 |j                  d      }d	}|r>t        j                  |j                               D ]  }|t        j                  |   z  } 	 t	        j                  |	|      }	|j                  |	|
f       E |S # t        j                   $ r- | j                   j                  t        d
      ||	fz         Y w xY w)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   )rJ   websubtable
websubdefsr   patternunescdelimr   delim_reregexpformatflaginflagsflags                 r/   
getwebsubsr  }  s   K$$Y/J$''%%j11J" %W!##E*
 AeU#$

 GGLL9:c7^K  ::o56e[U[[^4e[U[[^4 Q 7 +T**+	ZZ.F/0C%L 	 xx 	GGLL89S&MI	s   )F<GGc                 \    t        j                  | |i       t        j                  |      z   S rU   )r   getgraphnodecurrentgetgraphnodesymbol)rJ   r   s     r/   getgraphnoder    s/    ))c2%%c*+ +r1   rU   )NN)r   r  )\r  r  r5   r  i18nr   rV   r   r   commonr   r	   r
   r    r   r   r   r   r   r   r   r   r   r   r   r   r   r   uimodr   utilsr   sortdictr$   r0   r9   rC   rE   rk   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  r0  r?  rD  rG  rO  rg  rj  r8  rx  r  r]  r  r  r  r  r  r^  rR  r  rZ  wrappedr  r  r  r  r@   r1   r/   <module>r&     s     	 	       $ t}}.( Q
 Q
hD D$E&9
*+(FK;	;;
LL2@E-$E -O
 %f- K !&) <2"+
.%P3
,&R "D	 F
8E5,&& 5pUXX +\+r1   