
    6hk                       S SK Jr  S SKrS SKrS SKrS SKrSSKJr  SSKJ	r	J
r
  SSKJrJrJrJr  SSKJrJrJrJrJrJrJrJrJrJrJrJrJrJrJ r   SS	K!J"r"  \ RF                  " S
5      r$SHS jr%S r&SHS jr' " S S5      r( " S S\(5      r)S r*SIS jr+S r,S r-SHS jr.SHS jr/S r0S r1S r2S r3S r4S r5S r6SHS jr7SHS  jr8SJS! jr9S" r:S# r;S$ r<S% r=S& r>S' r?S( r@S) rAS*S+1\AlB        S, rCS- rDS*S+1\DlB        S. rES/ rFS0 rGS1 rHS2 rIS3 rJS4 rKS5 rLS6 rMS7 rNSKS8 jrOS9 rPS: rQS; rRS< rSS= rTS> rUS? rVS@ rWSA rX " SB SC\R                  5      rZ " SD SE\R<                  5      r[SF r\SG r]g)L    )annotationsN   )_)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                    U R                  SSSS9n/ n[        R                  5        H>  u  pVXS;   d  U R                  SSU-   SS9(       d  M%  UR	                  UUS   UUS.5        M@     [
        R                  " U5      $ )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EGH!'')	>R]]HsNd + 
 
 OO "&q'#		 * ##H--    c                    U SS S:w  a  SU -   n U SS  S:X  a  U S S n [         R                  R                  U 5      nUS:X  a  gUS-   $ )Nr   r      /)ospathdirname)pups     r0   r:   r:   K   sV    1v~1Hv~crF		B	Tz9r2   c              #     #    U(       a7  Uv   US:  a  US::  a  SnUv   U S:  d   eUS:  d   eX::  a  U S-  n X::  a  M   SU -  v   SU -  v   U S-  n M  7f)N   (   2   r   
   r       )step	firststeps     r0   _navseqrD   V   su     ?yBIOaxx1}}BJD 
$h$h
 s   =AAc                  6    \ rS rSrS rS r\rS rS rS r	Sr
g)	revnavf   c                &    UR                   U l        g)zENavigation generation object

:repo: repo object we generate nav for
N)	changelog_revlog)selfrepos     r0   __init__revnav.__init__g   s     ~~r2   c                &    U R                  5       SL$ )z,return True if any revision to navigate overN)_firstrK   s    r0   __nonzero__revnav.__nonzero__o   s    {{}D((r2   c                `     [        [        U R                  5      5      $ ! [         a     gf = f)z1return the minimum non-filtered changeset or NoneN)nextiterrJ   StopIterationrQ   s    r0   rP   revnav._firstu   s-    	T\\*++ 		s     
--c                J    [        U R                  R                  U5      5      $ N)r   rJ   noderK   revs     r0   r   
revnav.hex|   s    4<<$$S)**r2   c                t   U (       dB  [         R                  " [         R                  " / 5      [         R                  " / 5      S./5      $ / n[        SU5       H0  nXS:  a    O*UR                  X-   5        UR                  X-
  5        M2     UR	                  5         U R                  5       nSU-  U R                  U5      S./n/ nU H  n	XR                  ;  a  M  Xs=:  a  U:  a4  O  O1UR                  S[        X-
  5      -  U R                  U	5      S.5        SU	s=:  a  U:  d  Mc  O  Mg  UR                  S[        X-
  5      -  U R                  U	5      S.5        M     UR                  SSS.5        [         R                  " [         R                  " U5      [         R                  " U5      S./5      $ )	ai  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(   sortrP   r   rJ   abs)
rK   pospagelenlimittargetsffirst	navbeforenavafterr]   s
             r0   gen
revnav.gen   s    ++ $0#;#;B#?".":":2">  G$AyNN37#NN37#	 %
 	 '%$((5/JK	C,,& 5 %CI6#O 3}}}  %CI6#O  	6F;< ''  ,77	B*66x@
 	
r2   )rJ   N)__name__
__module____qualname____firstlineno__rM   rR   __bool__rP   r   rk   __static_attributes__rA   r2   r0   rF   rF   f   s"    &) H+8
r2   rF   c                       \ rS rSrS rS rSrg)
filerevnav   c                n    UR                  5       R                  U l        UR                  U5      U l        g)zqNavigation generation object

:repo: repo object we generate nav for
:path: path of the file we generate nav for
N)
unfilteredrI   
_changelogfilerJ   )rK   rL   r7   s      r0   rM   filerevnav.__init__   s'     //+55yyr2   c                |    [        U R                  R                  U R                  R	                  U5      5      5      $ rZ   )r   rx   r[   rJ   linkrevr\   s     r0   r   filerevnav.hex   s+    4??''(<(<S(ABCCr2   )rx   rJ   N)rm   rn   ro   rp   rM   r   rr   rA   r2   r0   rt   rt      s    	'Dr2   rt   c              #  (  #    U H  nUR                  5       UR                  5       UR                  5       UR                  5       UR	                  5       UR                  5       S.n[        US5      (       a  UR                  5       US'   Uv   M     g 7f)N)r#      revs   user   dates   description   branchr7      file)r   r]   userdatedescriptionbranchhasattrr7   )r   ctxssds       r0   _ctxsgenr      so     UUWEEGVVXVVXMMOxxz
 1fAgJ    BBc                   U c  / n U  Vs/ s H2  o"R                  5       UR                  5       R                  :w  d  M0  UPM4     n n[        U 5      S:X  a  U S   R	                  5       U:X  a  / n [
        R                  " [        U 4S9$ s  snf )Nr   r   args)r[   rL   nullidlenr]   r   mappinggeneratorr   )siblingshiderevr   s      r0   	_siblingsr      st    #C8avvx1668??'B8HC
8}hqkoo/7:((DD Ds
   /BBc                    [         R                  " USUSS9nS HL  u  pEU R                  R                  U5      nUc  M%  [        R
                  " U5      n[        X5Ub  UOS5        MN     U$ )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          r0   r   r      sk    ''
dGH LLR =$$Q'AHq}!$? Or2   c                :    [        XS5      nUR                  SUS9$ )Ns   annotateT)followr   )r   annotate)r   fctxr   r   s       r0   r   r      s!    s4H==x=88r2   c                   [        U [        R                  5      (       aP  U R                  5       nU R	                  5       R                  5       U:w  a  [        U R                  5       U   /U5      $ [        U R                  5       U5      $ rZ   )	
isinstancer   basefilectxintrorev	changectxr]   r   rL   parents)ctxhider   s      r0   r   r      se    #w**++<<>==? H,chhj23T::S[[]D))r2   c                6    [        U R                  5       U5      $ rZ   )r   children)r   r   s     r0   r   r     s    S\\^T**r2   c                    U R                  5       nU(       a)  [        R                  " US   [        US   5      S./5      $ [        R                  " / 5      $ )Nr   r   )r   r#   )renamedr   r)   r   )r   rs     r0   
renamelinkr     sF    A''1Q4#ad))L(MNN##B''r2   c                J    [         R                  " U R                  U5      SS9$ N   namename)r   
hybridlistnodetagsrL   r[   s     r0   nodetagsdictr     s    ""4==#6WEEr2   c                J    [         R                  " U R                  U5      SS9$ r   )r   r   nodebookmarksr   s     r0   nodebookmarksdictr     s     ""4#5#5d#;'JJr2   c                    / nUR                  5       n U R                  U5      nXAR	                  5       :X  a  UR                  U5        [        R                  " USS9$ ! [        R                   a    S n NQf = fr   r   	branchtipr   RepoLookupErrorr[   r(   r   r   rL   r   branchesr   
branchnodes        r0   nodebranchdictr     sn    HZZ\F^^F+
 XXZ""8'::	    
s   A A76A7c                    / nUR                  5       n U R                  U5      nUS:w  a$  XAR	                  5       :w  a  UR                  U5        [        R                  " USS9$ ! [        R                   a    S n NWf = fNs   defaultr   r   r   r   s        r0   nodeinbranchr   %  su    HZZ\F^^F+
 
hhj 8""8'::	    
s   A$ $A=<A=c                ~    / nU R                  5       nUS:w  a  UR                  U5        [        R                  " USS9$ r   )r   r(   r   r   )r   r   r   s      r0   nodebranchnodefaultr   1  s9    HZZ\F""8'::r2   c              #  4   #    U" U5       H  nX40v   M
     g 7frZ   rA   )r   rg   r[   r   ts        r0   _nodenamesgenr   9  s     tWi s   c                p    Uc  U R                   nU R                  US4n[        R                  " [        X1S9$ )Ns   tagr   r   )r   r   r   r   r   rL   t1r[   r   s       r0   showtagr   >  s3    |{{MM4(D((TKKr2   c                p    Uc  U R                   nU R                  US4n[        R                  " [        X1S9$ )Ns   bookmarkr   )r   r   r   r   r   r   s       r0   showbookmarkr   E  s5    |{{k2D((TKKr2   c                   ^ ^^^^^ / mT R                  5       m[        U5      mS mUUUU UU4S jn[        R                  " U5      $ )Nc                <    U S   (       + U S   R                  5       4$ )Nr   r   )r]   )items    r0   <lambda>branchentries.<locals>.<lambda>P  s    QKa7r2   c              3    >#    SnT(       d>  TR                  5       R                  5        H  u  p#pETR                  TU   U45        M     [        TTSS9 Hx  u  peT	S:  a  UT	:  a    g US-  nU(       a  SnOUR	                  5       T;  a  SnOSn[        T
5      UR                  5       UUR                  5       UR                  5       S.v   Mz     g 7f)	Nr   T)keyreverser   s   closeds   inactives   open)   parityr      statusr#   r   )		branchmapiterbranchesr(   sortedr[   rU   r   r   r   )r   counttaghstipclosedr   statusheadsre   parityrL   sortkeytipss           r0   entriesbranchentries.<locals>.entriesR  s     (,(8(E(E(G$T#Y/0 )H!$GTBKCqyUe^QJE"5($ <::<!  Cs   CC)r   r   r   r   )rL   stripecountre   r   r   r   r   r   s   ` ` @@@@r0   branchentriesr   L  s?    DJJLE{#F7G . ((11r2   c                    UR                  S5      n[        R                  " U R                  SS9n[        R                  " U R                  SXS9$ )Nr4   F)realfsr2   )auditor)lstripr   pathauditorroot	canonpath)rL   r7   r   s      r0   	cleanpathr   l  s?    ;;tD""499U;GdiidDDr2   c                    SnSUR                   ;   a-  UR                   S   nUR                  S5      nUS:w  a  X#S-   S  n[        R                  " X5      $ )Nr`   r#      :r5   r   r   findr   	revsymbolrL   r   changeidiposs       r0   r   r   r  sU    H#,,<<(}}T"2:-HT,,r2   c                    SUR                   ;   aA  UR                   S   nUR                  S5      nUS:w  a  US U n[        R                  " X5      $ g )Nr#   r   r5   r  r  s       r0   basechangectxr  }  sP    #,,<<(}}T"2:H$$T44r2   c                   SUR                   ;  a  [        [        S5      e[        XR                   S   5      nSUR                   ;   a  UR                   S   nO0SUR                   ;   a  UR                   S   nO[        [        S5      e [        R
                  " X5      U   nU$ ! [        R                   a    U R                  X#S9n U$ f = f)Nr   s   file not givenr#   s   filenodes   node or filenode not given)fileid)	r   r	   r   r   r   r  r   	RepoErrorfilectx)rL   r   r7   r  r   s        r0   r  r    s    cll"N,=>>T<<01D#,,<<(		$<<,N,IJJ3  06 K ?? 3||D|2K3s   
B% %#CCc                   U R                   R                  S5      nU(       d  g [        U5      S:  a  [        [        S5      e [        [        US   R                  SS5      5      u  p# [        R                  " X#5      $ ! [         a    [        [        S5      ef = f! [        R                   a)  n[        [        [        R                  " U5      5      eS nAff = f)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1I
9~,.NOONsIaL$6$6tQ$?@E$$X66  N,.LMMN  E,h.>.>s.CDDEs$   %B  *B  BC2$CCc                    SU S-   U4-  $ )Ns   %d:%dr   rA   )r  r  s     r0   formatlineranger    s    x!|V,,,r2   c              #     ^#    U R                   " US5      m[        R                  " X5      nUR                  X5       H"  n[	        U4S jUS    5       5      US'   Uv   M$     g 7f)N   repoc              3  .   >#    U  H
  nTU   v   M     g 7frZ   rA   ).0	successorrL   s     r0   	<genexpr>&_succsandmarkersgen.<locals>.<genexpr>  s      (
-@	DO-@s   s
   successors)resourcer   showsuccsandmarkerstovaluer   )r   mappingitemmappingsr   rL   s       @r0   _succsandmarkersgenr(    se     GW-D11'CL$$W6' (
-1--@(
 
] 
	 7s   A"A%c                6    [         R                  " [        U4S9$ Nr   )r   r   r(  r   r&  s     r0   succsandmarkersr,    s    (()<G:NNr2   r     ctxc              #     #    U R                   " US5      nU R                   " US5      n[        R                  " X#5      nU H.  nUR                  S5      (       a  [	        US   5      US'   Uv   M0     g 7f)Nr  r-  s   divergentnodes)r#  r   whyunstabler   r   )r   r&  rL   r   r   entrys         r0   _whyunstablegenr1    sn     GW-D


7F
+C!!$,G99&'''07H1I'JE#$ s   A2A4c                6    [         R                  " [        U4S9$ r*  )r   r   r1  r+  s     r0   r/  r/    s    ((zJJr2   c                :  ^ [         R                  " T5      n0 ST_STR                  5       _S[        U5      _STR	                  5       _STR                  5       _STR                  5       _STR                  5       _STR                  5       _S	TR                  5       _S
[        _S[        R                  " TR                  5       SS9_S[        _S[        T5      _S[!        U T5      _S[#        U T5      _S[%        X5      _S['        X5      _U4S jU4S jS.E$ )Nr-  r   r#   s   authors   descr   s   extras   phases   obsoletes   succsandmarkerss   instabilitiess   instabilityr   s   whyunstabler   s   inbranchs   branchess   tagss	   bookmarksc                   > [        T5      $ rZ   r   r   r&  r   s     r0   r   commonentry.<locals>.<lambda>  s	    GCLr2   c                   > [        T5      $ rZ   r   r6  s     r0   r   r7    s	    8C=r2   )   parent   child)r   binnoder]   r   r   r   r   extraphasestrobsoleter,  r   r   instabilitiesr/  r   r   r   r   r   )rL   r   r[   s    ` r0   commonentryrA    s[   ??3D 		
 		 	T 	388: 	" 	 	#))+ 	#,,. 	S\\^ 	O 	,11n
" 	#$ 	&s+%& 	\$,'( 	^D#.)* 	d)+, 	'3-. 981 r2   c                2  ^^ U R                   nTR                  5       m[        R                  " T5      n[	        USU5      n[        TR                  5       X0R                  5      n[        UT5      nUR                  U4S jUU4S jUU4S jUUS.5        U$ )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5      $ rZ   r5  r6  s     r0   r   !changelistentry.<locals>.<lambda>  s	    GCLr2   c                "   > [        TTS-
  5      $ Nr   r5  r   r&  r   r]   s     r0   r   rE     s    S1W0Er2   c                "   > [        TTS-   5      $ rG  r9  rH  s     r0   r   rE    s    xS1W/Er2   )s
   allparentsr:  r;  rC  s   files)
rL   r]   r   r<  r   listfilediffsfilesmaxfilesrA  update)webr   rL   nshowtagsrK  r0  r]   s    `     @r0   changelistentryrQ    s~     88D
'')CAt_a0H#))+q,,7Ec"E	LL@EE%	
 Lr2   c              #     #    U R                   nSnU H/  nXR:  a    gUS-  n[        XU   5      n[        U5      US'   Uv   M1     g7f)z2Emit up to N records for an iterable of revisions.r   r   r   N)rL   rQ  rU   )rN  revsmaxcountparityfnrL   r   r]   r0  s           r0   changelistentriesrV  	  sP     88DE
#Y/>i s   AAc                    SU R                   ;   a#  [        R                  " U R                   S   5      $ [        [        R
                  " U5      5      $ )Nr#   )r   r   	revescaper   r   r<  )r   r   s     r0   symrevorshortnoderY    s<    #,,((g)>??W__S)**r2   c           
   #  (  #    [        U5      nUR                  5       n[        UR                  5       5       HV  u  pVXa;  a  SnO
Xd;   a  SnOSnUS:X  a  SOSnU R                  " UUR                  5       UUS-   [        U5      US.5      v   MX     g 7f)Ns   removeds   addeds   modifieds
   filenolinks   filenodelinkr   )r#   r      blocknor   r   )r   
filesadded	enumeraterK  processr   rU   )	r   r   r   r   r\  blocknorg   r   templates	            r0   _listfilesgenra  !  s     {#F!J		,
<F_F F$*j$8=ooo#aK<!	
 		
 -r   c                  ^
 [        U R                  S[        R                  " U5      5      n[	        U R                  S[        R                  " U5      5      n[        U5      n[        U R                  U R                  5      nUc  UR                  5       nU R                  SS5      nSU R                  R                  ;   a  U R                  R                  S   n[        XUSU5      n[        U R                  5      n[        U R                  R                  X5      m
[!        UT
U5      n	[#        S	U[%        U R                  U5      UR'                  5       UUU[(        R*                  " [,        XR                  4S9U
4S jU	U R/                  UR'                  5       5      S.
[0        R2                  " [5        U R                  U5      5      D6$ )
zBObtain a dictionary to be used to render the "changeset" template.s   changesettags   changesetbookmarkNr   s   styler   c                   > [        T5      $ rZ   )diffsummary)r   r&  diffstatsgens     r0   r    changesetentry.<locals>.<lambda>Y  s
    [-Fr2   )
diffsymrevbasenodechangesettagchangesetbookmarkchangesetbranchrK  rd  diffstatr-   rA   )r   rL   r   r<  r   r   r  r   p1configr   diffsr   r   diffstatgenr   rm  dictrY  r   r   mappedgeneratorra  r1   r   	strkwargsrA  )rN  r   rP  showbookmarks
showbranchbasectxstylerg  r   	diffstatsre  s             @r0   changesetentryrz  8  so    sxx'//#2FGH &(<M %S)JCHHcgg.G&&(JJvx(E377###  *7D%0Ds'Fsxx{{C9LlF3I  #.'"**oo 6
 G+ 

[37
8 r2   c              #     #    US U  H$  nU R                   " S[        U5      US.5      v   M&     [        U5      U:  a  U R                   " S0 5      v   g g 7f)Ns   filedifflink)r#   r   s   fileellipses)r^  r   r   )r   rK  r[   maxrg   s        r0   _listfilediffsgenr}  `  sQ     4C[oooTQ/OPP 
5zCooor22 s   AAc                8    [         R                  " [        XU4S9$ r*  )r   rs  r}  )rK  r[   r|  s      r0   rJ  rJ  g  s    ''c 2 r2   c           	   #  "  #    [        US5       H{  u  pESX$4-  nUR                  S5      (       a  SnO4UR                  S5      (       a  SnOUR                  S5      (       a  SnOS	nU R                  " UUUUS
U-  -   SU-  S.5      v   M}     g 7f)Nr   s   %d.%d   +s   difflineplus   -s   difflineminus   @s
   difflineats   difflines   l%ss   % 8s)s   lines   lineno   lineids
   linenumber)r]  
startswithr^  )r   linesr_  lineidprefixlinenol
difflinenoltypes           r0   _prettyprintdifflinesr  m  s     ua(	 11
<<#E\\$$E\\$!EEoo!'&:*==&3	
 	
 )s   BBc	              #  n  #    U(       a  [         R                  " U5      n	O[         R                  " 5       n	[        R                  " UR
                  SS9n
[        U5      n[        R                  " XX)U
S9n[        US5       H  u  nu  pnnUS:w  a  USS  nU Vs/ s H  nUS-   PM
     nnU HD  u  nnUb*  Ub'  Uu  nnnn[        R                  " UU4U5      (       d  M3  UR                  U5        MF     U(       d  M}  [        R                  " [        UX4S9n[        U5      UUS.v   M     g s  snf 7f)	NTr    optsr   s   raw   
r   )r   r[     lines)r   exactalwaysr   r   r   r   	diffhunksr]  r   hunkinrangeextendr   rs  r  rU   )r   rL   r   rw  rK  rx  r   r  r  mr   r   r  r_  fctx1fctx2headerhunkshr  	hunkrange	hunkliness1l1s2l2r  s                              r0   	_diffsgenr    s'     KKLLN~~dgg6H{#FsHEI2;Iq2I..%F?ABZF$*+FqUF+$) Iy$)>!*BB(("b9==LL# %* 5,,%UG,JA  <#  3J ,s   BD5D0*AD5?6D5c                r    U R                   UUUUU R                  UU4n[        R                  " [        USS9$ )Ns	   diffblockr   )rL   r   r   r   r  )rN  r   rw  rK  rx  r  r  r   s           r0   rp  rp    sE    	D ((< r2   c           	         U=(       a    SU-  =(       d    SnXS=(       a    SU-  =(       d    S-  nU(       a  SU-  OSnU(       a  SU-  OSnU UUSU-  U=(       d    SUSU-  U=(       d    SS.$ )Ns   l%dr2   s   r%ds   %ds   % 6s)r"   r  s
   leftlinenos   leftlinenumbers   leftlines   rightlinenos   rightlinenumbers	   rightlinerA   )type
leftlinenoleftlinerightlineno	rightlinelineidllnorlnos           r0   	_compliner    s|    1Vj08SF
4v3;;F!+5:D"-5;3D!"T>_##dN&3	 	r2   c              #    #    U H  u  pEpgn[         R                  " U5      nXe-
  n	X-
  n
[        X5      n[        U5       H&  n[	        UX\-   S-   XU-      X|-   S-   X'U-      S9v   M(     X:  a+  [        X[-   U5       H  n[	        UUS-   X   S S S9v   M     M  X:  d  M  [        X{-   U5       H  n[	        US S US-   X,   S9v   M     M     g 7f)Nr   )r  r  r  r  r  )r   sysbytesminranger  )r   	leftlines
rightlinesopcodesr  llolhirlorhilen1len2r   is                r0   _getcompblockgenr    s     $+ 3S  &yyDuA7Q;"7+GaK$1W-   ;3;, 1u&\ $"  - [3;,#! !A(m  -/ %,s   BC!.Cc                >    XU4n[         R                  " [        USS9$ )Ns   comparisonliner   )r   r   r  )r  r  r  r   s       r0   _getcompblockr    s'    7+D((t*; r2   c              #     #    [         R                  " SX#5      nUS:  a!  [        X#UR                  5       5      nSU0v   gUR	                  US9 H  n[        X#U5      nSU0v   M     g7f)z>Generator function that provides side-by-side comparison data.Nr   r  )rO  )difflibSequenceMatcherr  get_opcodesget_grouped_opcodes)r   
contextnumr  r  r   r  ocs          r0   _comparegenr    sh     i<AA~)Am''*'5BiR8AQ- 6s   A(A*c                >    XU4n[         R                  " [        USS9$ )Ns   comparisonblockr   )r   r   r  )r  r  r  r   s       r0   comparer    s'    :.D(($%7 r2   c           	   #     #    [         R                  " U SS05      n[         R                  " [        R                  " UR                  X#S95      5      n[         R                  " U5      u  pVpxn	 XEXgX4v   M	  7f)z3Generator function that provides the diffstat data.s   noprefixFr  )r   r   diffstatdatar   	iterlinesrg  diffstatsum)
r   r   rw  r   statsmaxnamemaxtotaladdtotalremovetotalbinarys
             r0   rq  rq  	  sl      ~~b;"67Ht~~chhwh.NOPE7<7H7H7O4Gxf
h+EE s   A5A7c                T    [        U 5      u  pp4pV[        S5      [        U5      UU4-  $ )z#Return a short summary of the diff.s5    %d files changed, %d insertions(+), %d deletions(-)
)rU   r   r   )statgenr  r  r  r  r  r  s          r0   rd  rd    s;     ?C7m;EHFGE
K  r2   c              #    ^#    [        U5      u  pEmpgnUR                  5       n	U4S jn
SnU HX  u  ppX;   a  SOSnX-   nUS-  nU R                  " UUR                  5       UUUU
" U5      U
" U5      [        U5      S.5      v   MZ     g 7f)Nc                4   > TS:X  a  g[        U 5      T-  S-  $ )Nr   d   )float)r  r  s    r0   pct_diffstattmplgen.<locals>.pct"  s!    q=a8#s**r2   r   s   diffstatlinks   diffstatnolinkr   )r#   r   s   filenos   totals   addpcts	   removepctr   )rU   rK  r^  r   )r   r   r  r   r  r  r  r  r  rK  r  filenofilenameaddsremovesisbinaryr`  totalr  s                     @r0   _diffstattmplgenr    s     >B7m;EHhVIIKE+
 F-2)&.&7?=N!oo!!t9!'l<
 	
	 .3s   BBc                <    XU4n[         R                  " [        US9$ )z5Return a diffstat template for each file in the diff.r   )r   rs  r  )r   r  r   r   s       r0   rm  rm  :  s     &!D''(8tDDr2   c                  l    \ rS rSrSS jrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rSrg)sessionvarsi@  c                    X l         Xl        g rZ   _start_vars)rK   varsstarts      r0   rM   sessionvars.__init__A  s    
r2   c                     U R                   U   $ rZ   r  )rK   r   s     r0   __getitem__sessionvars.__getitem__E  s    zz#r2   c                     X R                   U'   g rZ   r  )rK   r   values      r0   __setitem__sessionvars.__setitem__H  s    

3r2   c                j    [        [        R                  " U R                  5      U R                  5      $ rZ   )r  copyr  r  rQ   s    r0   __copy__sessionvars.__copy__K  s     499TZZ0$++>>r2   c                L    [         R                  " XU5      nX0R                  ;   $ rZ   )r   unwrapvaluer  )rK   r   r&  r   s       r0   containssessionvars.containsN  s!    ''$?zz!!r2   c                f    [         R                  " XU5      nU R                  R                  U5      $ rZ   )r   r  r  r   )rK   r   r&  r   s       r0   	getmembersessionvars.getmemberR  s'    &&w=zz~~c""r2   c                @    [         R                  " [        S5      5      eNs   not comparabler   r  r   rK   r   r&  s      r0   getminsessionvars.getminV      q!2344r2   c                @    [         R                  " [        S5      5      er   r  r  s      r0   getmaxsessionvars.getmaxY  r  r2   c                @    [         R                  " [        S5      5      e)Ns   not filterabler  )rK   r   r&  selects       r0   filtersessionvars.filter\  s    q!2344r2   c              #     #    U R                   n[        U R                  R                  5       5       H#  u  p4U[        R
                  " U5      US.v   SnM%     g 7f)N)r   s   values	   separator   &)r  r   r  r&   r   r  )rK   r   	separatorr   r  s        r0   itermapssessionvars.itermaps`  sQ     KK	 !1!1!34JC"**51' 
 I 5s   AAc                @    [         R                  " [        S5      5      e)Ns    not displayable without templater  )rK   r   r&  seps       r0   joinsessionvars.joinj  s    q!DEFFr2   c                &    U R                  XS5      $ Nr2   )r  r  s      r0   showsessionvars.shown  s    yy3//r2   c                ,    [        U R                  5      $ rZ   )boolr  r  s      r0   toboolsessionvars.toboolq  s    DJJr2   c                    U R                   $ rZ   r  r  s      r0   r%  sessionvars.tovaluet  s    zzr2   r  N)   ?)rm   rn   ro   rp   rM   r  r  r  r  r  r  r  r  r  r  r  r  r%  rr   rA   r2   r0   r  r  @  sI     ?"#555G0 r2   r  c                      \ rS rSrS rSrg)wsgiuiix  c                    g)NP   rA   rQ   s    r0   	termwidthwsgiui.termwidthz  s    r2   rA   N)rm   rn   ro   rp   r%  rr   rA   r2   r0   r"  r"  x  s    r2   r"  c                   / nU R                   R                  S5      nX R                   R                  S5      -  nU GHN  u  p4USS n[        R                  " U5      n[        R
                  " SXfU4-  U5      nU(       d*  U R                   R                  [        S5      X44-  5        Mn  [        R                  " SU-  5      nUR                  XWR                  " S5      5      n	UR                  XWR                  " S5      5      n
UR                  " S5      nS	nU(       aA  [        R                  " UR                  5       5       H  nU[        R                  U   -  nM      [        R                  " X5      n	UR                  X45        GMQ     U$ ! [        R                    a-    U R                   R                  [        S
5      X94-  5         GM  f = f)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   )rL   websubtable
websubdefsr   patternunescdelimr   delim_reregexpformatflaginflagsflags                 r0   
getwebsubsr=  ~  s   K$$Y/J''%%j11J"!##E*
 AU#$

 GGLL9:c^K  ::o56e[[^4e[[^4 Q 7T** 8	ZZ.F/0C #L 	 xx 	GGLL89SMI 	s   #(F<GGc                ^    [         R                  " X0 5      [         R                  " U5      -   $ rZ   )r   getgraphnodecurrentgetgraphnodesymbol)rL   r   s     r0   getgraphnoderA    s-    ))2%%c*+ +r2   rZ   )NN)r   r  )^
__future__r   r  r  r6   r*  i18nr   r[   r   r   commonr	   r
   r   r    r   r   r   r   r   r   r   r   r   r   r   r   r   r   uimodr   utilsr   sortdictr%   r1   r:   rD   rF   rt   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r(  r,  	_requiresr1  r/  rA  rQ  rV  rY  ra  rz  r}  rJ  r  r  rp  r  r  r  r  r  rq  rd  r  rm  wrappedr  r"  r=  rA  rA   r2   r0   <module>rK     s   #   	 	       $ }}.( 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 +\+r2   