
    	^c#              
       b   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mZmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZmZ ej         rd dl!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' e"e#e$e%e'fD ]Z(e(sJ d	 Z)d
 Z*	 	 	 	 	 	 	 	 d;dZ+ G d d          Z,d Z- G d d          Z. G d de.          Z/ G d de.          Z0d Z1d Z2d<dZ3d=dZ4e	j5         G d d                      Z6d Z7d Z8d Z9d  Z:d>d"Z;d# Z<d?d$Z=d%d&d'd(d)d*d+d,d-d.	Z>d/ Z?d0 Z@d1 ZAd2 ZBd3 ZCd4 ZDd5 ZEd@d6ZFd7 ZGd8 ZHd9 ZId: ZJdS )A    N   )_)nullrevwdirrev)attr)dagoperror	formattergraphmodmatchmdiffmergepatchpathutilpycompatrevset
revsetlangscmutilsmartset
templatekw	templaterutil)dateutil
stringutil)AnyCallableDictOptionalSequenceTuplec                    |                      d          }|rh	 t          |          }n/# t          $ r" t          j        t          d                    w xY w|dk    r!t          j        t          d                    nd}|S )z0get the log limit according to option -l/--limits   limits    limit must be a positive integerr   s   limit must be positiveN)getint
ValueErrorr	   
InputErrorr   )optslimits     6/usr/lib/python3/dist-packages/mercurial/logcmdutil.pygetlimitr)   9   s    HHXE 	KJJEE 	K 	K 	K"1%H#I#IJJJ	KA::"1%>#?#?@@@  Ls	   ) ,Ac                    |                                  }|j                            dd          r|                                                                 t
          k    rddlm} |                    |          }|	                    | 
                                           |j                            ddid          5  |j                                        5  t          j        |                                 |           d	d	d	           n# 1 swxY w Y   d	d	d	           n# 1 swxY w Y   |S | 
                                S )
zget the context object to use as parent when diffing


    If diff.merge is enabled, an overlayworkingctx of the auto-merged parents will be returned.
       diffs   merger   )context)   uis
   forcemerges#   internal:merge3-lie-about-conflictss
   merge-diff)wcN)repoui
configboolp2revr    r,   overlayworkingctxsetbasep1configoverridesilentr   )ctxr/   r,   wctxs       r(   diff_parentr<   H   s    88::Dw'8,, 71J1J((..SVVXXW## :	 
 
 
	/ 
	/ !! / /CFFHH..../ / / / / / / / / / / / / / /
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ vvxxs6   ?D%)DD%D	D%D	D%%D),D)F    c                    
!"# |r.t          j        |j        |                                |          #nd#d}d }
fd}#dk    rt	          j        |d          } | |#                    }#dz  #|                                D ]P}|                    #          s9                     t          d           | ||                    |fz             Qt	          j
        |#gd	
          }t          j        ||          }|}|j                            dd          p|j                            dd          !!#fd} |||          }|rd|                    dd          }d}                                 s                                 |	z
  }#s |t	          j        |          |          }|                    |||||||          "|                                 rn|p }|r)t)          j        t-          j        "          |          g"t-          j        t-          j        "                    D ]}|                    |           n|r)t)          j        t-          j        "          |          "nt)          j        d "|          "                                 rM" fd}t-          j        t-          j         |                                D ]}                     |           n"D ]\  }}                     ||           |                                }t	          j        ||          D ]\  }}|}	 ||j         |         d         }n# tB          $ r d}Y nw xY wt          j"        ||          }|j#        $                    
|          } |s6|%                    |          s!tM          |                                          r|                     |||||||            dS )zshow diff or diffstat.r=   Nc                       fdS )Nc                 ,      |                     S N )xfgs    r(   <lambda>z1diffordiffstat.<locals>.compose.<locals>.<lambda>}   s    11Q44 r=   rB   )rD   rE   s   ``r(   composezdiffordiffstat.<locals>.compose|   s          r=   c                 .    t          j        |           S rA   )	posixpathjoin)rD   prefixs    r(   pathfnzdiffordiffstat.<locals>.pathfn   s    ~fa(((r=   T)legacyrelativevalue   /s(   warning: %s not inside relative root %s
s   path)patsdefaults   devels   all-warningss   check-relrootc                     r)|                                st          d| fz            | t                    d          S )Ns%   file %s doesn't start with relroot %s)
startswithAssertionErrorlen)rD   	checkrootrelroots    r(   relrootpathfnz%diffordiffstat.<locals>.relrootpathfn   sS     g!6!6 $<7|K   S\\^^$$r=   r   F)r,   noprefixP   )r&   rL   copysourcematchhunksfilterfn)widthc                     | S rA   rB   )chunkskwargss     r(   rF   z diffordiffstat.<locals>.<lambda>   s     r=   )r&   c               3   N   K   D ]\  } }                     | |          V  d S )Nlabelra   )chunkrb   r^   r0   s     r(   genzdiffordiffstat.<locals>.gen   sC      $* 7 7LE5((5(6666667 7r=   ra   r   )changesstatfprK   )'r   	canonpathrootgetcwdr   getuipathfnfilesrR   warnr   r   matchmodintersectmatchersr0   r1   copyplain	termwidthdiffcanwritewithoutlabelsr   diffstatr   	iterlinesfilechunkiterchunkbufferwrite
diffstatui	difflabelcanbatchlabeledwritesnodeitersubrepossubstateKeyErrorsubdirmatcherwvfsreljoinexactany)$r0   r/   diffoptsctx1ctx2r   re   rf   rg   
graphwidthrK   ri   listsubreposr[   rZ   rG   rL   uipathfn	uirelroot	matchrootrelrootmatchrW   r\   outrc   rd   rb   node2subpathsub	tempnode2submatch	subprefixrU   r^   rV   s$   `         `                      @@@r(   diffordiffstatr   e   s   "  $TYtDDO! ! !) ) ) ) ) #~~ &tFFFHVVG__--	4 	 	I''00 BCCxy 1 122I>?  
 }T	7KKK*5,??&G&&o
 
 <W*:;; 		% 	% 	% 	% 	% 	% // @==U=;;xxzz 	0LLNNZ/E 	@WW066??FYY'#   F 
~1133~hB 	KnT^F%;%;5IIIJF'(8(@(@AA 	 	EIIe	  	%dnV&<&<EJJJFF_//h  F ##%% 
	-7 7 7 7 7 7 +D,<SSUU,C,CDD      !' - -ue,,,,IIKKE,T488  		  M'215	 	 	 	 III		
 )'599I%%fg66	 
	5;;w// 
	3x~~7G7G3H3H 
	HH   	 	 	 s   M$$M32M3c                   &    e Zd ZdZd Zd ZddZdS )	changesetdifferzBGenerate diff of changeset with pre-configured filtering functionsc                 N    t          j        |                                          S rA   )r   matchallr/   selfr:   s     r(   _makefilematcherz changesetdiffer._makefilematcher   s    

+++r=   c                     d S rA   rB   r   s     r(   _makehunksfilterz changesetdiffer._makehunksfilter   s    tr=   r   Fc                     t          ||                                |t          |          ||                     |          |||                     |          	  	         d S )N)r   rf   r   r[   )r   r/   r<   r   r   )r   r0   r:   r   r   rf   s         r(   showdiffzchangesetdiffer.showdiff   sj    HHJJ'',,!//44
	
 
	
 
	
 
	
 
	
 
	
r=   N)r   F)__name__
__module____qualname____doc__r   r   r   rB   r=   r(   r   r      sL        LL, , ,  
 
 
 
 
 
r=   r   c                 `   dd|                                  z  g}|                                 r|                    d           |                                 rD|                    d           |                                 D ]}|                    d|z             d                    |          S )Ns   log.changesets   changeset.%ss   changeset.obsoletes   changeset.unstables   instability.%s    )phasestrobsoleteappend
isunstableinstabilitiesrJ   )r:   labelsinstabilitys      r(   changesetlabelsr      s    #,,.. @AF
||~~ -+,,,
~~ ;+,,,,,.. 	; 	;KMM+k9::::99Vr=   c                   H    e Zd ZdZddZd Zd ZddZd Zd	 Z	d
 Z
ddZdS )changesetprinterz9show changeset information when templating not requested.NFc                 f   || _         || _        || _        |pt                      | _        t          j        ||          | _        |o|                    d          | _	        |o|                    d          | _
        i | _        i | _        d | _        d | _        t          j                    | _        d S )Ns   stats   patch)r0   r/   bufferedr   _differr   diffallopts	_diffoptsr"   _includestat_includediffheaderhunk
lastheaderfooterr   getlogcolumns_columns)r   r0   r/   differr   r   s         r(   __init__zchangesetprinter.__init__  s    	 2!2!2*2x88$>g)>)>$?h)?)?	"022r=   c                 2   |                                 }|| j        v rA| j        |         }|| j        k    r!|| _        | j                            |           | j        |= || j        v r/| j                            | j        |                    | j        |= d S d S rA   )r3   r   r   r0   ry   r   )r   r:   r3   hs       r(   flushzchangesetprinter.flush  s    ggii$+C ADO##"#a   C $)GMM$)C.)))	# r=   c                 V    | j         r!| j                            | j                    d S d S rA   )r   r0   ry   r   s    r(   closezchangesetprinter.close%  s2    ; 	'GMM$+&&&&&	' 	'r=   c                 8   t          j        |          }| j        rg| j                            d           |                     |||           | j                                        | j        |                                <   d S |                     |||           d S )NT)labeled)	r   byteskwargsr   r0   
pushbuffer_show	popbufferr   r3   )r   r:   copiespropss       r(   showzchangesetprinter.show)  s    $U++= 	+Gt,,,JJsFE***#'7#4#4#6#6DIcggii   JJsFE*****r=   c                 B   |                                 }|                    dd          }| j        j        r3| j                            dt          j        |          z  d           dS | j        }| j                            |d         t          j        |          z  t          |                     |	                                }|dk    r%| j                            |d	         |z  d
           | j
        j                                        D ]V\  }}	|dk    r|	                    | j
        |          D ].}
| j                            |	j        |
z  d|	j        z             /W| j        j        r7| j                            |d         |                                z  d           t          j        | j
        |          D ]P}d|                                z  }| j                            |d         t          j        |          z  |           Q| j        j        r|                                }|| j
        j        j        }t*          }n| j
        j                            |          }| j                            |d         t          j        | j        ||          z  d           | j                            |d         |                                z  d           | j                            |d         t5          j        |                                          z  d           |                                rM|                                }| j                            |d         d                    |          z  d           n)|                                 r| !                    |           | "                    |           | j        j        rtG          g d|$                                |%                                |&                                g          D ]?\  }}|r8| j                            ||         d                    |          z  d           @nj|'                                rV| j        j(        rJ| j                            |d         d                    |'                                          z  d           |rP| j        j(        rDd |D             }| j                            |d          d                    |          z  d!           |)                                }|rl| j        j        r`tU          |                                          D ]>\  }}| j                            |d"         |tW          j,        |          fz  d#           ?|-                                .                                }|r| j        j(        r`| j                            t_          d$          d%           | j                            |d%           | j                            d&           n7| j                            |d'         tW          j0        |          z  d(           | j                            d)           | 1                    ||           dS )*(show a single changeset or file revision
   graphwidthr   s   %s
s   log.nodera   N	   changesets   default   branchs
   log.branchs   branchess   log.%ss   phases	   log.phases   log.parent changeset.%s   parent   manifests   ui.debug log.manifest   users   log.user   dates   log.dates   instabilitys   , s   log.instability)   filess   files+s   files-r   s   ui.debug log.filesr   s   ui.note log.filesc                     g | ]}d |z  S )s   %s (%s)rB   .0cs     r(   
<listcomp>z*changesetprinter._show.<locals>.<listcomp>  s    555j1n555r=      copiess   ui.note log.copies   extras   ui.debug log.extras   description:
s   ui.note log.descriptions   

s   summarys   log.summary   
)2r}   r"   r0   quietry   r   formatchangeidr   r   branchr/   namesitemslogfmt	colorname	debugflagr   meaningfulparentsmanifestnodenodeconstantswdiridr   manifestlogr3   formatrevnodeuserr   datestrdater   r   rJ   r   _showobsfate_exthookzipfilesmodified
filesaddedfilesremovedrl   verboseextrasortedr   	escapestrdescriptionstripr   	firstline
_showpatch)r   r:   r   r   
changenoder   columnsr   nsnamensnamepctxrb   mnodemrevr   keyvaluer   r   s                       r(   r   zchangesetprinter._show2  s   XXZZ
YY}a00
7= 	GMM'0555[     F-L!G$:3$?$??!#&& 	 	
 	
 	
 ZGMM'),v5]MKKK)///11 	P 	PJFB $$ J77 P Pbi$.i",6NOOOOP7 	GMM!CLLNN2,     -di== 	 	D.@EGMM	"W%;D%A%AA      7 	$$&&E}	/6y,0077GMM$'u==>.    
 	gg&3;GGGGx/

;;;; 	 	
 	
 	
 >> 	#--//MGMM'%**]*C*CC(     
 \\^^ 	#c"""c7 	!000""$$cnn&6&68H8H8J8JK   
U  GMMtyy'7'773 "    YY[[ 	TW_ 	GMM!DIIciikk$:$::*      	dgo 	55f555FGMM	"TYYv%6%66+    
 		 	TW& 	$U[[]]33  
UH%j.B5.I.I(JJ/     
 oo''--// 	w 
'((0J     k1KLLLg&&&&J'**>{*K*KK(     	eZ(((((r=   c                 ^   t          j        | j        j        | j                  }t          j        | j        j        dt
          j        |          }|                    d|i                                          }|r/|D ].}| j        	                    | j
        d         |z  d           -d S d S )Ns   {join(obsfate, "
")}defaults	resources   ctxs   obsoletes   log.obsfatera   )r
   templateresourcesr/   r0   maketemplaterr   keywordsrenderdefault
splitlinesry   r   )r   r:   trestobsfateobsfatelines         r(   r   zchangesetprinter._showobsfate  s    *49<CC#IL$(	
 
 
 //63-00;;== 	&  M+.<(     	 	 r=   c                     dS )z.empty method used by extension as a hook pointNrB   r   s     r(   r   zchangesetprinter._exthook  s      r=   r   c                 j   | j         r)| j                            | j        || j        |d           | j         r!| j        r| j                            d           | j        r)| j                            | j        || j        |d           | j         s| j        r| j                            d           d S d S )NTrf   r   F)r   r   r   r0   r   r   ry   )r   r:   r   s      r(   r   zchangesetprinter._showpatch  s     	L!!dnjt "     	!!2 	!GMM%    	L!!dnju "     	! 1 	!GMM%     	! 	!r=   NNFrA   )r   )r   r   r   r   r   r   r   r   r   r   r   r   rB   r=   r(   r   r     s        CC3 3 3 3
 
 
' ' '+ + + +u) u) u)n  $= = =! ! ! ! ! !r=   r   c                   (    e Zd ZdZ	 ddZd Zd ZdS )changesetformatterz1Format changeset information by generic formatterNFc                     t                               | |||||           t          j        ||d          | _        || _        d S )NT)git)r   r   r   difffeatureoptsr   _fm)r   r0   r/   fmr   r   r   s          r(   r   zchangesetformatter.__init__  sF     	!!$D&(HMMM.r8FFFr=   c                 8    | j                                          d S rA   )r"  endr   s    r(   r   zchangesetformatter.close  s    r=   c                 	   | j                                                              |                               t	          j        |                              t	          j        |                                                               }| j	        j
        r|sdS                     |                                |                                |                                                    |                                          |                                                    |                                d                              |                                d                              fd|                                D             d          	           | j	        j        sd
|v rL                                        |                                p| j        j        j                             | j	        j        sd|v r;                                        |                                                     | j	        j        sd|v sd|v sd|v r                                        |                                d                              |                                d                              |                                d                     | j	        j         o| j	        j        }|sd|v r=                                        |                                 d                     |r|sd|v r.                                        |pi dd                     | j!        sd|v rn| j	        "                                 | j#        $                    | j	        || j%        d                               | j	        &                                           | j'        sd|v rp| j	        "                                 | j#        $                    | j	        || j%        d                               | j	        &                                            dS dS )!r   )r:   )r3   r}   N   bookmark)r  s   tagc                 ^    g | ])}                     |                                          *S rB   )hexfuncr}   )r   r   r#  s     r(   r   z,changesetformatter._show.<locals>.<listcomp>  s-    ===!AFFHH%%===r=   s   node)r   phaser   r   desc	bookmarkstagsparentsr   )manifestr   )r   s   modifieds   added   removeds   file)modifiedaddedremovedr   )rl   r   s   names   source)r	  r
  r   s   diffstatTr  )ru   r+   F)rs   )(r"  	startitemr,   datar   intrevr)  binnodedatahintr0   r   r   r   r   
formatdater   r   
formatlistr,  r-  r.  r   r   r/   r   r   
formatdictr   r   r   r   r   rl   r   r   r   r   r   r   r   )r   r:   r   r   r9  r   r#  s         @r(   r   zchangesetformatter._show  s+   X



s

GN3''bjj9M9M.N.NOOO;;==7= 	 	F
::<<,,..sxxzz**""mmCMMOO+mFFsxxzz77MM====s{{}}===G "   	 	
 	
 	
 7 	x 7 7GG$$&&H$)*A*H     
 7 	6H 4 4GG"--		44G555 G
	h&&8##X%%GGs'8'8':':IImmCNN$4$47mCCc&6&6&8&8wGG     g'';DGO 	Dh(**GG"--		'-BBGCCC 	v 	h!6!6GG}}V\rwi}PP      	2x 7 7G   L!!$'3T!JJJGGTW..00G111 	.8 3 3G   L!!$'3U!KKKGG**,,G----- !4 3r=   r  )r   r   r   r   r   r   r   rB   r=   r(   r  r    sS        ;; BG     <. <. <. <. <.r=   r  c                   2     e Zd ZdZ	 ddZ fdZd Z xZS )changesettemplatera  format changeset information.

    Note: there are a variety of convenience functions to build a
    changesettemplater for common cases. See functions such as:
    maketemplater, changesetdisplayer, buildcommittemplate, or other
    functions that use changesest_templater.
    NFc                 n   t                               | |||||           t          j        ||          x| _        }t          j        |t          j        |t          j                  | _	        t          j                    | _        j        | _        ddddj        j        ddddddi| _        j        rWd| j        j        d	f| j        j        d
f| j        j        dfg}|D ])\  }	}
| j        D ]}||
z   }|	r|| j	        v r
|| j        |<   *nZfd| j                                        D             }t          j        | j	        |          }| j                            |           | j        d         r@| j                            | j	                            | j        d         i                      d S d S )N)r  r  cache   headerr=      footers	   docheader	   docfooter	   separator)Tr=   s   _verboses   _quiets   _debugc                 *    g | ]}|j         k    |S rB   )ref)r   ptmplspecs     r(   r   z/changesettemplater.__init__.<locals>.<listcomp>K  s%    LLLq!x|:K:K:K:K:Kr=   )r   r   r
   r  _tresourcesloadtemplaterr   r  defaulttemplr  	itertoolscount_counterrF  _tref_partsmapfiler0   r   r   r   keystemplatepartsmapupdatery   render)r   r0   r/   rH  r   r   r   r  	tmplmodesmodepostfixr  cur	partnamesms      `           r(   r   zchangesettemplater.__init__$  s    	!!$D&(HMMM"+"=b$"G"GG4(()
 
 
 "))\
ssL(,###
  	" +.	*"I.	I "+ - -g - -Ag+C -tv),A-- MLLLDK$4$4$6$6LLLI*8TVYGGAKq!!!;|$ 	HGMM$&--L(A2FFGGGGG	H 	Hr=   c                     | j         d         rB| j        sd| _        | xj        | j                            | j         d         i           z  c_        t	          t
          |                                           S )NrC  r=   )rP  r   r  rU  superr>  r   )r   	__class__s    r(   r   zchangesettemplater.closeR  sh    ;|$ 	H; "!KK46==\)BBGGGKK'..44666r=   c                    |                                 }||d<   t          | j                  x|d<   }d|i|d<   |                    dd          }| j        d         rD|dk    r>| j                            | j                            | j        d         i                      | j        d         rv| j                            | j        d         |          }| j	        r|| j
        |                                <   n,| j        |k    r!|| _        | j                            |           | j        | j                 }| j                            | j                            ||                     |                     |           |                     ||           | j        d	         r4| j        s/| j                            | j        d	         |          | _        d
S d
S d
S )r   r  s   indexr   s   revcacher   r   rD  rA  rB  N)rp   nextrN  r"   rP  r0   ry   r  rU  r   r   r3   r   rO  r   r   r   )r   r:   r   r   indexr   r   r	  s           r(   r   zchangesettemplater._showY  s   

f"&t}"5"55h%'0kYY}a00

 ;|$ 	HGMM$&--L(A2FFGGG ;y! 	%dk)4e<<A} %)*CGGII&&?a''&'DOGMM!$$$ k$*%dfmmC//000cZ(((;y! 	K; K"fmmDK	,BEJJ	K 	KK Kr=   r  )r   r   r   r   r   r   r   __classcell__)r^  s   @r(   r>  r>    sx          HM,H ,H ,H ,H\7 7 7 7 7 K  K  K  K  K  K  Kr=   r>  c                 d    | r|rJ |rt          j        d|          S t          j        |           S )Nr   )r
   mapfile_templatespecliteral_templatespec)tmplrQ  s     r(   templatespecrg  |  s?    !!!! 4-lGDDD-d333r=   c                    |sh|sf|                      dd          }|r&t          j        t          j        |                    S t          j        |                      dd                    }|ss|rq|}d}t          j        	                    |          d         s2t          j
        d|z             pt          j
        |          \  }}|r|}t          j        d||          S t          j        | d|          S )	zqFind the template matching the given template spec or style

    See formatter.lookuptemplate() for details.
       command-templates   logr-      styleNr   s   map-cmdline.r   )configr
   re  r   unquotestringr   
expandpathospathsplittry_open_templaterd  lookuptemplate)r0   rf  stylerQ  rg   mapnames         r(   _lookuptemplaterv    s     @ @yy-v66 	@1)2I$2O2OPPPOBIIeX$>$>??E 	IE 	Iw}}W%%a( 	"%7')  6,W55 Wb  "!-lGRHHH#Bd;;;r=   c                 P    t          j        |          }t          | |||          S )zKCreate a changesettemplater from a literal template 'tmpl'
    byte-string.)r   )r
   re  r>  )r0   r/   rf  r   specs        r(   r  r    s+     )$//Db$x@@@@r=   c                 :   |||f}t          | |                    d          |                    d                    }|j        dv r%|                     d|          }t	          | ||g|R  S |j        s|j        s|j        st          | |g|R  S t          | ||g|R  S )a_  show one changeset using template or regular display.

    Display format will be the first non-empty hit of:
    1. option 'template'
    2. option 'style'
    3. [command-templates] setting 'log'
    4. [ui] setting 'style'
    If all of these values are either the unset or the empty string,
    regular display via changesetprinter() is done.
    s   templaterk  >      cbor   jsonrj  )	rv  r"   rF  r
   r  rf  rQ  r   r>  )r0   r/   r&   r   r   postargsrx  r#  s           r(   changesetdisplayerr}    s     h'H2txx44dhhx6H6HIID
 x%%%\\&$''!"dB:::::8 5DI 5dl 5D484444b$8x8888r=   c                   .   e Zd ZdZ ej                    Z ej                    Z ej                    Z ej         ej	        e
                    Z ej         ej	        e
                    Z ej        d          Z ej         ej	        e
                    Z ej        d          Z ej        d          Z ej         ej	        e
                    Z ej         ej	        e
                    Z ej         ej	        e
                    Z ej         ej	        e
                    Z ej        d          Z ej        d          Z ej        d          Z ej        d          Z ej        d          ZdS )walkoptszgOptions to configure a set of revisions and file matcher factory
    to scan revision/file history
    )rP   NFr   T)r   r   r   r   r   ibrO   r&   revspecFactorylistr,  branchesr   r  	no_mergesonly_mergesprune_ancestorsusersinclude_patsexclude_patsfollowforce_changelog_traversalfilter_revisions_by_patssort_revisionsr'   rB   r=   r(   r  r    s        
 4799D4799D dgiiG T 2 2333Itw|t|D11222H474   Dtw|t|D11222H&&&I$'%(((Kdgldl4&8&8999ODGLDL..///E 47<4<#5#5666L47<4<#5#5666L TWQF !( 6 6 6  'twt444 TWT***N DGD!!!EEEr=   r  c           
         |                     d          rd}n|                     d          rd}nd}|                     d          r|                     dd          rd	}nd
}nd}t          d*i d|d|d|                     dg           d|                     dg           d|                     dg           |                     dg           z   d|                     d          d|                     dg           dt          |                     d                    dt          |                     d                    d|                     dg           d|                     d g           d!|                     d"g           d#|                     d$g           d%|d&t          |                     d'                    d(|d)t	          |          S )+zwParse log command options into walkopts

    The returned walkopts will be passed in to getrevs() or makewalker().
    s   follow_firstr   s   follow   r      graph   experimentals   log.topo   topo   descNrO   r&   r  s   revr,  r'  r  r   s   only_branchr   r   r     keywordr  	   no_mergesr     only_mergesr     pruner  r   r  s   includer  s   excluder  r  r0  r  r'   rB   )r"   r1   r  boolr)   )r0   rO   r&   r  r  s        r(   	parseoptsr    s8    xx   	)		 xx ==+66 	%$NN$NN   TT $$$ ((;+++	 )R((488NB+G+GGG XXg *b))) txx--... .11222 2... hhw### XXj"--- XXj"---  v!" #'txx
';';"<"<"<#$ &~%& tnnn' r=   c                 ~   | d         }t          j        ||j        |j                  \  }}|                                p|                                 o|j        }|s|j        r|j        rt          |
                                          }t          |          }|}	|D ][}
|	s nV| |
         }|	D ]J}||v r|                    |           |                    |          r|                    |           d}|}	K\|D ]*}||v r$t          j        t!          d          |z            +n|j        r|
                                D ]}||vrYt"          j                            |                     |                    rd};t          j        t!          d          |z            |                     |          }|s$t          j        t!          d          |z            n0|
                                D ]}|                     |          }|sd}|r&|
                                D ]}|r	|| j        v r nd}|||fS )a^  Build matcher and expanded patterns from log options

    If --follow, revs are the revisions to follow from.

    Returns (match, pats, slowpath) where
    - match: a matcher built from the given pats and -I/-X opts
    - pats: patterns used (globs are expanded on Windows)
    - slowpath: True if patterns aren't as simple as scanning filelogs
    NTs>   cannot follow file not in any of the specified revisions: "%s"/   cannot follow file not in parent revision: "%s"s$   cannot follow nonexistent file: "%s"F)r   matchandpatsrO   r&   anypatsalwaysr  r  r  r  rl   setdiscardhasdirr	   
StateErrorr   ro  rp  existswjoinfilestore)r/   revswoptsr;   r   rO   slowpath	all_filesmissing_filesrl   rr:   rD   filelogrp  s                  r(   _makematcherr    s    :D&tUZDDKE4}} LLNN>u>   H!< <	$EM <	$ U[[]]++I	NNME . . E1g 	. 	.ACxx%--a0000A . &--a000#' -	.   %%*/  	   & \ 	$[[]]  D== w~~djjmm44 
#' #.!2   	    ))A,,   *ABBQF  !. [[]] $ $))A,, $  $H  	! ! ! ttz11E  2 !$  r=   c                     	 g 	|D ]>} |         	                     fd                    |          D                        ?i  fd}	fd}t          j         |            d          |fS )Nc              3   L   K   | ]}|                                          V  d S rA   )introfilectx)r   rD   r:   s     r(   	<genexpr>z!_fileancestors.<locals>.<genexpr>  s3      DDqSV((**DDDDDDr=   c                 z    t          j                            t          j        |           g                     S rA   )r   
matchfilesr"   r7  )r:   fcacher/   s    r(   filematcherz#_fileancestors.<locals>.filematcher  s.    !$

7>#3F3F(K(KLLLr=   c               3   j   K   t          j                  D ]\  } }d |D             | <   | V  d S )Nfollowfirstc                 6    g | ]}|                                 S rB   )rp  r   s     r(   r   z2_fileancestors.<locals>.revgen.<locals>.<listcomp>  s     00016688000r=   )r   filectxancestors)r3   csr  fctxsr  s     r(   revgenz_fileancestors.<locals>.revgen  sV      -eMMM 	 	GC00R000F3KIIII	 	r=   F)iterasc)extendwalkr   generatorset)
r/   r  r   r  r  r  r  r:   r  r  s
   `  `   @@@r(   _fileancestorsr  |  s    E E E1gDDDDCHHUOODDDDDDD FM M M M M M      
  5999;FFr=   c                     dS )zDhook for extensions to override the filematcher for non-follow casesNrB   )r/   rO   r&   s      r(   _makenofollowfilematcherr    s    4r=      .c                     	 t          j        | |||          S # t          j        $ r+}t          j        |j        d         |j                  d}~ww xY w)zResolves user-provided revset(s) into a single revision.

    This just wraps the lower-level scmutil.revsingle() in order to raise an
    exception indicating user error.
    r   hintN)r   	revsingler	   RepoLookupErrorr%   argsr  )r/   r  rP   
localaliases        r(   r  r    s^    7 wDDD  7 7 7qvayqv66667s    A&AAc                     	 t          j        | |          S # t          j        $ r+}t          j        |j        d         |j                  d}~ww xY w)zResolves user-provided revset(s) into two revisions.

    This just wraps the lower-level scmutil.revpair() in order to raise an
    exception indicating user error.
    r   r  N)r   revpairr	   r  r%   r  r  )r/   r  r  s      r(   r  r    sY    7tT***  7 7 7qvayqv66667s    A&AAc                     	 t          j        | ||          S # t          j        $ r+}t          j        |j        d         |j                  d}~ww xY w)zResolves user-provided revset(s).

    This just wraps the lower-level scmutil.revrange() in order to raise an
    exception indicating user error.
    r   r  N)r   revranger	   r  r%   r  r  )r/   specsr  r  s       r(   r  r    s\    7eZ888  7 7 7qvayqv66667s    A&AA)s   not merge()N)s   merge()N)Ns   _matchfiles(%ps))s   date(%s)N)s
   branch(%s)   %lr)s   filelog(%s)r  )s   keyword(%s)r  )s   ancestors(%s)s   not %lr)s   user(%s)r  )	r  r     _matchfilesr   r      _patslogr  r  r   c                    
  fd|j         D             |j        |j        |j        |j        |j        d |j        D             d}|j        rr|rpddg}|j        D ]}|	                    d|z              |j
        D ]}|	                    d|z              |j        D ]}|	                    d|z              ||d	<   n%|j        r|j        st          |j                  |d
<   g }t          |                                          D ]\  }}|st           |         \  
}	
rd
vr|	                    
           4|	s)|	                    t#          j        
|                     _
r
fd|D             }|	                    t#          j        |	|                     |j        r7|	                    t#          j        dd |j        D                                  |rdd                    |          z   dz   }nd}|S )z?Return a revset string built from log options and file patternsc                 @    g | ]}d                      |          z   S s   literal:)lookupbranch)r   br/   s     r(   r   z_makerevset.<locals>.<listcomp>  s,    OOO1K$"3"3A"6"66OOOr=   c                     g | ]}d |z   S r  rB   r   vs     r(   r   z_makerevset.<locals>.<listcomp>  s    777a+/777r=   )r   r   r  r  r  r  r   s   r:s	   d:relpaths   p:s   i:s   x:r  r     %c                 :    g | ]}t          j        |          S rB   )r   
formatspec)r   r  revops     r(   r   z_makerevset.<locals>.<listcomp>  s&    DDD1z,UA66DDDr=   r  c                 6    g | ]}t          j        |          S rB   )r   format_bookmark_revspecr  s     r(   r   z_makerevset.<locals>.<listcomp>  s#    MMM033MMMr=      (s    and    )N)r  r   r  r  r  r  r  r  rO   r   r  r  r  r  r   r   _opt2logrevsetr   r  r,  rJ   )r/   r  r  r&   	matchargsrG  expropvallistopr  s   `         @r(   _makerevsetr    s    POOOOOONo)'775;777 D % -( - L)	 	( 	(AUQY''''# 	( 	(AUQY''''# 	( 	(AUQY''''(^		' - - ,,[D$**,,'' < <C 	&r*v 	<T&&KK 	<KK
-eS99:::: EDDDDDDDKK
-fc::;;;; 
!MMU_MMM 	
 	
 	
  hmmD)))D0Kr=   c                 D   |j         rt          | |j                   }n|j        r6| j                                        | j        k    rt          j                    }nE|j        r|                     d          }n(t          j	        |           }|
                                 |S )z>Return the initial set of revisions to be filtered or followedr  )r  r  r  dirstater7   nullidr   basesetr  spansetreverse)r/   r  r  s      r(   _initialrevsr    s    } em,,	 $-**,,;;!!	 yy%%Kr=   c                     t          | |          }|st          j                    dfS t          | ||          \  }}t	          j        ||          }d}|j        rs|s                                r!t          j	        | ||j        dk              }n(|j
        rJ t          | ||j        dk              \  }}|                                 |t          | |j        |j                  }|fd}t!          | ||          }|j        r|j        dv sJ |j        dk    rW|                                sBt          j        || j        j                  }t-          j        t/          |          d	          }n>|                                s*|                                s|                    d
           |r!t-          j        d|          } || |          }|j        |                    d|j                  }||fS )zBuild (revs, makefilematcher) to scan revision/file history

    - revs is the smartset to be traversed.
    - makefilematcher is a function to map ctx to a matcher for that revision
    N)rO   r   r  c                     S rA   rB   )r:   r   s    r(   r  zmakewalker.<locals>.filematcher/  s    Lr=   >   r  r  r  T)istopor  r   )r  r   r  r  r   evolver  r  r   revancestorsr  r  r  r  rO   r&   r  r  r  toposort	changelog
parentrevsr   r  isdescendingsortr   r'   slice)	r/   r  r  rO   r  r  r  matcherr   s	           @r(   
makewalkerr    s.    e$$D (!!4''(tU;;E4KD)))EK|  	u||~~ 	%dDela>OPPPDD6666 .dEu|q/@! ! !D+ 	.tUZLL	 	 	 	 	 tUH--D 	$#'999997**;;== ?~dDN,EFF~d4jj>>>##%% 	$ 	$IIdI### #,tT**wtT""{zz!U[))r=   c                 f    t          | |          \  }}|s|dfS t                      }||_        ||fS )zvReturn (revs, differ) where revs is a smartset

    differ is a changesetdiffer with pre-configured file matcher.
    N)r  r   r   )r/   r  r  r  r   s        r(   getrevsr  F  sG     #4//D+ TzF)F<r=   c                 >   g }|                     dg           D ]}	 |                    dd          \  }}n2# t          $ r% t          j        t          d          |z            w xY w	 t          t          |                    d                    \  }}n2# t          $ r% t          j        t          d          |z            w xY wt          d          |z  }t          j
        | d||          }|                    |t          j        ||          f           |S )	zbParse --line-range log option and return a list of tuples (filename,
    (fromline, toline)).
    s
   line_range   ,r   s"   malformatted line-range pattern %s   :s   invalid line range for %ss3   line range pattern '%s' must match exactly one fileN)r"   rsplitr$   r	   r%   r   mapr#   rq  r   parsefollowlinespatternr   r   processlinerange)	r/   r&   linerangebyfnamepat	linerangefromlinetolinemsgfnames	            r(   _parselinerangeoptr  T  sO    xxr** 
 
	 ZZa00NC 	 	 	"7883>  		J"3	(=(=>>Hff 	J 	J 	J"1%A#B#BS#HIII	JFGG#M/dCEED)(F;;<	
 	
 	
 	
 s   7/A&*+B/Cc                      d         }i t           |          D ]\  }\  }}||vr$t          j        t          d          |z            |                    |          }t          j        |||          D ]v\  }}|                                }	|	t          }	|	|vr'	                    |	i           	                    |
                                g                               |           wd fd}
 fd}t          d          }t                      }||_        |
|_        t!          j        |          |fS )a  Return (revs, differ).

    "revs" are revisions obtained by processing "line-range" log options and
    walking block ancestors of each specified file/line-range.

    "differ" is a changesetdiffer with pre-configured file matcher and hunks
    filter.
    Nr  c                     |S rA   rB   )fctxhunkss     r(   nofilterhunksfnz)getlinerangerevs.<locals>.nofilterhunksfn  s    r=   c                 j                         t          j        |                     S fd}|S )Nc              3      K                        |                                           }|4|D ]/\  }|fV  t          fd|D                       r|fV  0d S |D ]}|V  d S )Nc              3   R   K   | ]!}t          j        d d         |          V  "dS )r  N)r   hunkinrange)r   lrhrs     r(   r  zJgetlinerangerevs.<locals>.hunksfilter.<locals>.filterfn.<locals>.<genexpr>  s8      NNR5,RVR88NNNNNNr=   )r"   rp  r   )r  r  
linerangeslinesr   r  fctxlinerangess        @r(   filterfnz7getlinerangerevs.<locals>.hunksfilter.<locals>.filterfn  s      '++DIIKK88J%!& ( (IBz %i NNNN:NNNNN ( %i( ( "  DJJJJ r=   )r"   r   r7  )r:   r#  r"  linerangesbyrevr  s     @r(   hunksfilterz%getlinerangerevs.<locals>.hunksfilter  sM    (,,W^C-@-@AA!""	 	 	 	 	 r=   c                     t                              t          j        |           g                     }t          j        |          S rA   )r  r"   r   r7  r  )r:   rl   r$  r/   s     r(   r  z%getlinerangerevs.<locals>.filematcher  s=    _(()<)<bAABB!$...r=   Tr  )r  r	   r  r   filectxr   blockancestorsintrorevr   
setdefaultrp  r   r   r   r   r   r   r  )r/   userrevsr&   r;   r  r  r  r  r  r3   r%  r  r  r   r$  r  s   `             @@r(   getlinerangerevsr,  l  s    :D O%7d%C%C    !!&"DEEM   ||E""$3D(FKK 	  	 OD)--//C{(""&&sB//::		R fY	        (/ / / / / / /4000DF)F)FD!!6))r=   c                 (   |                      dd          }|st          j        S t          j        |          }t          |t                    r|j        }nt          j	        |           }t          j
        | |t          j        |          fd}|S )Nri  s	   graphnoder  c                 8    || d}                     |          S )N)r  s   repo)r  )r/   r:   r@  r   templs       r(   
formatnodez'_graphnodeformatter.<locals>.formatnode  s$    t,,""5)))r=   )rl  r   getgraphnoder   rm  
isinstancer>  rI  r
   r  r  r  )r0   	displayerrx  r  r0  r/  s        @r(   _graphnodeformatterr4    s    99)<88D '&&"4((D)/00 /$*2..#
D:.$  E* * * * * r=   c           
         |pi }t          | |          }t          j                    }|j        }	|                     d          r/|	                    t                              |	d                     nt          j        t          j	        t          j
        d}
|
                                D ]5\  }}|                     dd|z  |	|                   |	|<   |	|         sd |	|<   6|                     dd          |_        i }|D ]\  }}}} ||||          }|r ||          nd } ||||||          }t          |          }|d         } |j        |f||dt#          j        |           |j                            |                              d	          }|d
         s|d
= |                    |           t/          j        |g|          D ]"\  }}}}t          j        | |||||           g }#|                                 d S )Nr     |)r   s   grandparents   missingr  s   graphstyle.%ss   graphshortenr  )r   r   r   )r4  r   
asciistatestylesrq   rT  dictfromkeysPARENTGRANDPARENTMISSINGPARENTr   rl  r1   graphshortenr`  r   r   	strkwargsr   poprq  r   rL  chainasciir   )r0   r/   dagr3  edgefn	getcopiesr   r0  stater9  	edgetypesr  r	  formatnode_cacher3   typer:   r.  charr   edges	firstedger\   r!  coldatas                            r(   displaygraphrO    s[   KRE$R33J!!E\F 
xx MdmmFD112222  $0 .
 
	
 #** 	# 	#ID#))!1D!8&+ F3K #; #"s  ]]?OLL#&  T3z$%566#,63$tT5#w77KK	!		
5	
 	
4<4Fu4M4M	
 	
 	
 ""3''--e44Ry 	b	*3/9+u*M*M 	 	&D$wN2udD%AAAEE	 OOr=   c                 l    t          j        ||          }t          | |||t           j        |           d S rA   )r   	dagwalkerrO  
asciiedges)r0   r/   r  r3  
getrenamedrevdags         r(   displaygraphrevsrU    s5    d++FT69h.A:NNNNNr=   c                     |D ]E}||         }|r ||          nd }|                     ||           |                    |           F|                                 d S )Nr4  )r   r   r   )r0   r/   r  r3  rF  r3   r:   r   s           r(   displayrevsrW    sq      3i#,63$s6***OOr=   c                     dD ]F}||v r@||         r8t          j        t          d          |                    dd          z            Gd S )N)s   newest_firsts+   -G/--graph option is incompatible with --%s   _   -)r	   r%   r   replace)rO   r&   r  s      r(   checkunsupportedgraphflagsr\    sd      ::$r(:"@AA**T4(()   r=   c                     t          |          }|                                 |
|d |         }t          j        | |          S rA   )r)   r  r   nodes)r/   r^  r&   r'   s       r(   	graphrevsr_    s?    TNNE	MMOOOfuf>$&&&r=   )NFNr   r=   r=   FN)F)NF)r  NrA   )NN)KrL  ro  rI   i18nr   r}   r   r   
thirdpartyr   r4   r   r	   r
   r   r   rn   r   r   r   r   r   r   r   r   r   r   r   r   utilsr   r   TYPE_CHECKINGtypingr   r   r   r   r   r    r  r)   r<   r   r   r   r   r  r>  rg  rv  r  r}  sr  r  r  r  r  r  r  r  r  r  r  r  r  r  r,  r4  rO  rU  rW  r\  r_  rB   r=   r(   <module>rf     s       				           " " " " " " " "                                           &                         8T8U3      H 		~ ~ ~ ~B
 
 
 
 
 
 
 
.  B! B! B! B! B! B! B! B!JI. I. I. I. I.) I. I. I.X`K `K `K `K `K) `K `K `KF4 4 4< < <8A A A A9 9 9 96 *" *" *" *" *" *" *" *"Z) ) )X]! ]! ]!@G G G0  
	7 	7 	7 	7	7 	7 	7	7 	7 	7 	7 )&/ &)(,"
 
8 8 8v  0 0 0f    0=* =* =*@  ,, , , ,^O O O
    ' ' ' ' 'r=   