
    6h              
         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JrJrJ	r	J
r
Jr  SSKJr  SSKJr  SSKJr  SSKJr  \R(                  (       a  S SK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%J&r&J'r'  SS
K(J)r)J*r*  S r+     S:S jr,        S;S jr- " S S5      r.S r/ " S S5      r0 " S S\05      r1 " S S\05      r2S<S jr3S<S jr4S=S jr5S>S jr6\Rn                   " S S5      5       r8        S?S jr9S r:S r;S  r<S@S! jr=S" r>SAS# jr?S$S%S&S'S(S)S*S+S,S-.	r@S. rAS/ rB      SBS0 jrC      SCS1 jrDS2 rES3 rFS4 rGSDS5 jrHS6 rIS7 rJS8 rKS9 rLg)E    )annotationsN)AnyCallableDictOptionalSequenceTuple   )_)MatcherT)wdirrev)attr)dagopdiffutilerror	formattergraphmodmatchmdiffpatchpathutilpycompatrevset
revsetlangscmutilsmartset
templatekw	templaterutil)dateutil
stringutilc                    U R                  S5      nU(       a4   [        U5      nUS::  a  [        R                  " [        S5      5      e U$ SnU$ ! [         a     [        R                  " [        S5      5      ef = f)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*   >   s    HHXE	KJE A:""1%>#?@@  L L  	K""1%H#IJJ	Ks   A *A;c           
     B  ^^^ U	(       a1  [         R                  " UR                  UR                  5       U	5      mOSmS nS nU4S jnTS:w  Ga  [        R
                  " USS9nU" U" T5      5      nTS-  mUR                  5        HF  nUR                  T5      (       a  M  U R                  [        S5      U" U" U5      5      U4-  5        MH     [        R                  " UT/SS	9n[        R                  " UU5      nUnUR                  R                  S
S5      =(       d    UR                  R                  S
S5      mUU4S jnU" UU5      nU(       a4  UR                  SSS9nT(       d  U" [        R
                  " U5      U5      nUR!                  UUUUUUU
S9$ )N    c                   ^ ^ U U4S j$ )Nc                    > T" T" U 5      5      $ N )xfgs    r)   <lambda>2get_diff_chunks.<locals>.compose.<locals>.<lambda>a   s    1Q4r,   r0   )r2   r3   s   ``r)   compose get_diff_chunks.<locals>.compose`   s	      r,   c                2   > [         R                  " TU 5      $ r/   )	posixpathjoin)r2   prefixs    r)   pathfnget_diff_chunks.<locals>.pathfnc   s    ~~fa((r,   T)legacyrelativevalue   /s(   warning: %s not inside relative root %s
s   path)patsdefaults   devels   all-warningss   check-relrootc                z   > T(       a&  U R                  T5      (       d  [        SU T4-  5      eU [        T5      S  $ )Ns%   file %s doesn't start with relroot %s)
startswithAssertionErrorlen)r2   	checkrootrelroots    r)   relrootpathfn&get_diff_chunks.<locals>.relrootpathfn{   s@    g!6!6$<7|K  S\^$$r,   r   Fcontextnoprefix)r'   r<   copysourcematchhunksfilterfn)r   	canonpathrootgetcwdr   getuipathfnfilesrC   warnr   r   matchmodintersectmatchersui
configboolcopydiff)rW   repodiffoptsctx1ctx2r   changesstatr;   rP   rN   rM   r6   r<   uipathfn	uirelroot	matchrootrelrootmatchrH   rF   rG   s           `          @@r)   get_diff_chunksre   M   s    $$TYYtDO!) #~ &&tFVG_-	4I''00BCy 12I>? ' }}T	7K**5,?&GG&&o
 <WW*:; 		% /==U=;W006?F99'#   r,   c                .  ^ ^ [        T UUUUUUUU
UUS9mU(       a:  UR                  SSS9nSnT R                  5       (       d  T R                  5       U	-
  nUc  T R	                  5       (       a  U=(       d    T nU(       a*  [
        R                  " [        R                  " T5      WS9/m[        R                  " [        R                  " T5      5       H  nUR                  U5        M     OU(       a*  [
        R                  " [        R                  " T5      WS9mO[
        R                  " S TUS	9mT R                  5       (       aO  UU 4S
 jn[        R                  " [        R                  " U" 5       5      5       H  nT R                  U5        M     OT H  u  nnT R                  UUS9  M     UR                  5       n[         R"                  " X45       H  u  nnUn Ub  UR$                  U   S   n[(        R*                  " UU5      nUR,                  R/                  U
U5      nU(       d6  UR1                  U5      (       d   [3        UR5                  5       5      (       d  M  UR7                  T UUUUUUUS9  M     g! [&         a    Sn Nf = f)zshow diff or diffstat.)r_   r`   r;   rP   rN   r   FrJ   P   N)widthc                    U $ r/   r0   )chunkskwargss     r)   r4    diffordiffstat.<locals>.<lambda>   s    r,   )r'   c               3  F   >#    T H  u  pTR                  XS9v   M     g 7f)Nlabelrn   )chunkro   rj   rW   s     r)   gendiffordiffstat.<locals>.gen   s#     $*LE((5(66 %+s   !rn   r
   )r_   r`   fpr;   )re   rY   plain	termwidthcanwritewithoutlabelsr   diffstatr   	iterlinesfilechunkiterchunkbufferwrite
diffstatui	difflabelcanbatchlabeledwritesnoder   itersubrepossubstateKeyErrorrU   subdirmatcherwvfsreljoinexactanyrS   rZ   )rW   r[   r\   r]   r^   r   r_   r`   rs   
graphwidthr;   rP   listsubreposrN   rh   outrp   rq   ro   node2subpathsub	tempnode2submatch	subprefixrj   s   `                        @r)   diffordiffstatr      s@   $ 
#F ==U=;xxzzLLNZ/E	~1133hBnnT^^F%;5IJF''(8(8(@AEIIe B %%dnnV&<EJF__/hF ##%%7 ++D,<,<SU,CD E !'ue, !' IIKE,,T8		  MM'215	 ))'59II%%fg6	5;;w//3x~~7G3H3HHH   	 9
  	 I		s   %JJJc                  8    \ rS rSrSrS rS rS	S jrS
S jrSr	g)changesetdiffer   zBGenerate diff of changeset with pre-configured filtering functionsc                J    [         R                  " UR                  5       5      $ r/   )r   matchallr[   selfctxs     r)   _makefilematcher changesetdiffer._makefilematcher   s    
++r,   c                    g r/   r0   r   s     r)   _makehunksfilter changesetdiffer._makehunksfilter   s    r,   c                    [        UUR                  5       U[        R                  " U5      UU R	                  U5      UUU R                  U5      S9	  g )N)r   r`   r   rN   )r   r[   r   diff_parentr   r   )r   rW   r   r\   r   r`   s         r)   showdiffchangesetdiffer.showdiff   sL    HHJ  %'',!//4
	
r,   c                >   [        UUR                  5       U[        R                  " U5      UU R	                  U5      UU R                  U5      S9n/ n[        R                  " [        R                  " U5      5       H  u  pxpUR                  UUU	U
S.5        M     U$ )N)r   r`   rN   )   names	   additionss   removalss   binary)re   r[   r   r   r   r   r   diffstatdatar   rx   append)r   rW   r   r\   r`   rj   diffdatafilename	additionsremovalsbinarys              r)   getdiffstatschangesetdiffer.getdiffstats  s     HHJ  %'',//4	
 5:5G5GNN6"6
1H OO%"+!)%	6
 r,   r0   N)r   FF)
__name__
__module____qualname____firstlineno____doc__r   r   r   r   __static_attributes__r0   r,   r)   r   r      s    L,
r,   r   c                <   SSU R                  5       -  /nU R                  5       (       a  UR                  S5        U R                  5       (       a<  UR                  S5        U R	                  5        H  nUR                  SU-  5        M     SR                  U5      $ )Ns   log.changesets   changeset.%ss   changeset.obsoletes   changeset.unstables   instability.%s    )phasestrobsoleter   
isunstableinstabilitiesr:   )r   labelsinstabilitys      r)   changesetlabelsr      s}    #,,. @AF
||~~+,
~~+,,,.KMM+k9: /99Vr,   c                  T    \ rS rSrSrSS jrS rS rSS jrS r	S	 r
S
 rSS jrSrg)changesetprinteri+  z9show changeset information when templating not requested.Nc                v   Xl         X l        XPl        U=(       d
    [        5       U l        [
        R                  " X5      U l        U=(       a    UR                  S5      U l	        U=(       a    UR                  S5      U l
        0 U l        0 U l        S U l        S U l        [        R                   " 5       U l        g )Ns   stats   patch)rW   r[   bufferedr   _differr   diffallopts	_diffoptsr#   _includestat_includediffheaderhunk
lastheaderfooterr   getlogcolumns_columns)r   rW   r[   differr\   r   s         r)   __init__changesetprinter.__init__.  s    	 2!2**28$>g)>$?h)?	"002r,   c                d   UR                  5       nX R                  ;   aL  U R                  U   nX0R                  :w  a!  X0l        U R                  R	                  U5        U R                  U	 X R
                  ;   a6  U R                  R	                  U R
                  U   5        U R
                  U	 g g r/   )revr   r   rW   r{   r   )r   r   r   hs       r)   flushchangesetprinter.flush<  s    ggi++C AOO#"#a C ))GGMM$))C.)		# r,   c                r    U R                   (       a&  U R                  R                  U R                   5        g g r/   )r   rW   r{   r   s    r)   closechangesetprinter.closeH  s"    ;;GGMM$++& r,   c                8   [         R                  " U5      nU R                  (       aa  U R                  R	                  SS9  U R                  XU5        U R                  R                  5       U R                  UR                  5       '   g U R                  XU5        g )NT)labeled)	r   byteskwargsr   rW   
pushbuffer_show	popbufferr   r   )r   r   copiespropss       r)   showchangesetprinter.showL  sk    $$U+==GGt,JJsE*#'77#4#4#6DIIcggi JJsE*r,   c                   UR                  5       nUR                  SS5      nU R                  R                  (       a2  U R                  R	                  S[
        R                  " U5      -  SS9  gU R                  nU R                  R	                  US   [
        R                  " U5      -  [        U5      S9  UR                  5       nUS:w  a   U R                  R	                  US	   U-  S
S9  U R                  R                  R                  5        Hd  u  pUS:X  a  M  U	R                  U R                  U5       H7  n
U R                  R	                  U	R                  U
-  SU	R                  -  S9  M9     Mf     U R                  R                  (       a.  U R                  R	                  US   UR!                  5       -  SS9  [
        R"                  " U R                  U5       HJ  nSUR!                  5       -  nU R                  R	                  US   [
        R                  " U5      -  US9  ML     U R                  R                  (       a  UR%                  5       nUc'  U R                  R&                  R(                  n[*        nO%U R                  R,                  R/                  U5      nU R                  R	                  US   [
        R0                  " U R                  X5      -  SS9  U R                  R	                  US   UR3                  5       -  SS9  U R                  R	                  US   [4        R6                  " UR9                  5       5      -  SS9  UR;                  5       (       a@  UR=                  5       nU R                  R	                  US   SR?                  U5      -  SS9  O&URA                  5       (       a  U RC                  U5        U RE                  U5        U R                  R                  (       a~  [G        / SQURI                  5       URK                  5       URM                  5       /5       H>  u  nnU(       d  M  U R                  R	                  UU   SR?                  U5      -  SS9  M@     OmURO                  5       (       aX  U R                  RP                  (       a=  U R                  R	                  US   SR?                  URO                  5       5      -  SS9  U(       a_  U R                  RP                  (       aD  U Vs/ s H  nSU-  PM
     nnU R                  R	                  US    SR?                  U5      -  S!S9  URS                  5       nU(       at  U R                  R                  (       aY  [U        UR                  5       5       H<  u  nnU R                  R	                  US"   U[V        RX                  " U5      4-  S#S9  M>     UR[                  5       R]                  5       nU(       a  U R                  RP                  (       aY  U R                  R	                  [_        S$5      S%S9  U R                  R	                  US%S9  U R                  R	                  S&5        O4U R                  R	                  US'   [V        R`                  " U5      -  S(S9  U R                  R	                  S)5        U Rc                  X5        gs  snf )*(show a single changeset or file revision
   graphwidthr   s   %s
s   log.nodern   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.filess   %s (%s)   copiess   ui.note log.copies   extras   ui.debug log.extras   description:
s   ui.note log.descriptions   

s   summarys   log.summary   
)2r   r#   rW   quietr{   r   formatchangeidr   r   branchr[   namesitemslogfmt	colorname	debugflagr   meaningfulparentsmanifestnodenodeconstantswdiridr   manifestlogr   formatrevnodeuserr    datestrdater   r   r:   r   _showobsfate_exthookzipfilesmodified
filesaddedfilesremovedrS   verboseextrasortedr!   	escapestrdescriptionstripr   	firstline
_showpatch)r   r   r   r   
changenoder   columnsr   nsnamensnamepctxro   mnodemrevr   keyvaluecr  r  s                        r)   r   changesetprinter._showU  sh   XXZ
YY}a0
77==GGMM'0055[   --L!G$:$:3$??!#& 	 	
 ZGGMM'),v5]MK))////1JF $ J7bii$.i",,6NO 8 2 77GGMM!CLLN2,   --dii=D.@EGGMM	"W%;%;D%AA   > 77$$&E}		//66yy,,007GGMM$''=>.  
 	gg&3;GGx//
;;; 	 	
 >>--/MGGMM'%**]*CC(  
 \\^^c"c77!0""$cnn&68H8H8JK
U 5GGMMtyy'773 "  YY[[TWW__GGMM!DIIciik$::*   dggoo.45fj1nfF5GGMM	"TYYv%66+  
 		TWW&&$U[[]3
UH%j.B.B5.I(JJ/   4 oo'--/ww'(0J   k1KLg&J'**>*>{*KK(   	e(; 6s   [c                   [         R                  " U R                  R                  U R                  5      n[         R                  " U R                  R                  S[
        R                  US9nUR                  SU05      R                  5       nU(       a4  U H-  nU R                  R                  U R                  S   U-  SS9  M/     g g )Ns   {join(obsfate, "
")}defaults	resources   ctxs   obsoletes   log.obsfatern   )r   templateresourcesr[   rW   maketemplaterr   keywordsrenderdefault
splitlinesr{   r   )r   r   trestobsfateobsfatelines         r)   r  changesetprinter._showobsfate  s    **499<<C##IILL$((	
 //63-0;;=&MM+.<(    ' r,   c                    g)z.empty method used by extension as a hook pointNr0   r   s     r)   r  changesetprinter._exthook  s    r,   c                   U R                   (       a0  U R                  R                  U R                  XR                  USS9  U R                   (       a,  U R
                  (       a  U R                  R                  S5        U R
                  (       a0  U R                  R                  U R                  XR                  USS9  U R                   (       d  U R
                  (       a  U R                  R                  S5        g g )NTr`   r   F)r   r   r   rW   r   r   r{   )r   r   r   s      r)   r  changesetprinter._showpatch  s    LL!!nnjt "  !2!2GGMM% LL!!nnju "   1 1GGMM%  !2r,   )r   r   r   r   r   r   r   r   r   r   r[   rW   NNFr/   )r   )r   r   r   r   r   r   r   r   r   r   r  r  r  r   r0   r,   r)   r   r   +  s/    C3
'+u)n$=!r,   r   c                  0    \ rS rSrSr SS jrS rS rSrg)	changesetformatteri  z1Format changeset information by generic formatterNc                r    [         R                  XX$XV5        [        R                  " XSS9U l        X0l        g )NT)git)r   r   r   difffeatureoptsr   _fm)r   rW   r[   fmr   r\   r   s          r)   r   changesetformatter.__init__  s/     	!!$D(M..rFr,   c                8    U R                   R                  5         g r/   )r5  endr   s    r)   r   changesetformatter.close  s    r,   c                	   U R                   nUR                  5         UR                  US9  UR                  [        R
                  " U5      UR                  [        R                  " U5      5      S9  UR                  5       nU R                  R                  (       a  U(       d  gUR                  UR                  5       UR                  5       UR                  5       UR                  UR                  5       5      UR!                  5       UR#                  UR%                  5       SS9UR#                  UR'                  5       SS9UR#                  UR)                  5        Vs/ s H!  odR                  UR+                  5       5      PM#     snSS9S9  U R                  R,                  (       d  S	U;   aS  UR                  UR                  UR/                  5       =(       d     U R0                  R2                  R4                  5      S
9  U R                  R,                  (       d  SU;   a,  UR                  UR7                  UR9                  5       5      S9  U R                  R,                  (       d  SU;   d  SU;   d  SU;   ae  UR                  UR#                  UR;                  5       SS9UR#                  UR=                  5       SS9UR#                  UR?                  5       SS9S9  U R                  R,                  (       + =(       a    U R                  R@                  nU(       d  SU;   a+  UR                  UR#                  URC                  5       SS9S9  U(       a  U(       d  SU;   a'  UR                  UR7                  U=(       d    0 SSS9S9  U RD                  (       d  SU;   aL  U RF                  RI                  U R                  XRJ                  SS9nUR                  UR#                  USS9S9  U RL                  (       d  SU;   aq  U R                  RO                  5         U RF                  RQ                  U R                  XRJ                  SS9  UR                  U R                  RS                  5       S9  ggs  snf ) r   )r   )r   r   N   bookmark)r  s   tags   node)r   phaser   r   desc	bookmarkstagsparentsr   )manifestr   )r  s   modifieds   added   removeds   file)modifiedaddedremovedr   )rS   r   r   s   source)r  r  r   s   diffstatTr-  )rw   s   diffF)rZ   )*r5  	startitemrK   datar   intrevhexfuncbinnodedatahintrW   r   r   r   r   
formatdater   r  
formatlistr?  r@  rA  r   r   r   r[   r   r   
formatdictr  r  r  r  r  rS   r   r   r   r   r   r   r   r   )	r   r   r   r   r6  rM  r  r  rI  s	            r)   r   changesetformatter._show  sY   XX



s

GNN3'bjj9M.NO;;=77==
::<,,.sxxz*"mmCMMO+mFsxxz7MM/2{{}=}!AFFH%}=G "  	 	
 77x 7GG$$&H$))*A*A*H*H  
 77H 4GG"--		4G5 GGh&8#X%GGs'8'8':ImmCNN$47mCc&6&6&8wG   gg''';DGGOOh(*GG"--		'-BGCvh!6GG}}V\rwi}P   x 7<<,,nn4 - D GGR]]4k]BGC8 3GG LL!!$''3U!KGG**,G- !4M >s   "(Q<)r   r5  r/  )	r   r   r   r   r   r   r   r   r   r0   r,   r)   r1  r1    s    ; BG=.r,   r1  c                  ^   ^  \ rS rSr% SrS\S'   S\S'   S\S'    SS	 jrU 4S
 jrS rSr	U =r
$ )changesettemplateri=  a  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.
zformatter.templateresources_tresourceszOptional[bytes]r   ztemplater.templaterr&  c                p   [         R                  XX$XV5        [        R                  " X5      =U l        n[        R
                  " UU[        R                  U[        R                  S9U l	        [        R                  " 5       U l        UR                  U l        SSSSUR                  UR                  SSSSSS0U l        UR                   (       a  SU R"                  R$                  S	4U R"                  R&                  S
4U R"                  R(                  S4/nU HD  u  pU R                   H/  nX-   nU	(       d  M  XR                  ;   d  M!  XR                  U'   M1     MF     OwU R                  R+                  5        Vs/ s H  oUR                  :w  d  M  UPM     nn[        R,                  " X0R                  U5      nU R                  R/                  U5        U R                  S   (       aC  U R"                  R1                  U R                  R3                  U R                  S   0 5      5        g g s  snf )N)r  r  cache   headerr,      footers	   docheader	   docfooter	   separator)Tr,   s   _verboses   _quiets   _debug)r   r   r   r   rT  loadtemplaterr   r"  defaulttemplr&  	itertoolscount_counterref_tref_partsmapfilerW   r  r   r   keystemplatepartsmapupdater{   render)r   rW   r[   tmplspecr   r\   r   r%  	tmplmodesmodepostfixr&  curp	partnamesms                   r)   r   changesettemplater.__init__L  s    	!!$D(M"+"="=b"GG4(((())
 ")\\
ssLL(,,###
  +.	*""I.	I "+A+Ctvv),A % "+ %)KK$4$4$6L$6qx||:K$6IL**8VVYGAKKq!;;|$GGMM$&&--L(A2FG %	 Ms    H3H3c                   > U R                   S   (       aT  U R                  (       d  SU l        U =R                  U R                  R                  U R                   S   0 5      -  sl        [        TU ]  5       $ )NrY  r,   )rb  r   r&  rg  superr   )r   	__class__s    r)   r   changesettemplater.closez  sO    ;;|$;;!KK466==\)BBGGKw}r,   c                
   UR                  5       nXS'   [        U R                  5      =US'   nSU0US'   UR                  SS5      nU R                  S   (       aH  US:  aB  U R
                  R                  U R                  R                  U R                  S   0 5      5        U R                  S   (       a  U R                  R                  U R                  S   U5      nU R                  (       a  X`R                  UR                  5       '   O1U R                  U:w  a!  X`l        U R
                  R                  U5        U R                  U R                     nU R
                  R                  U R                  R                  Xs5      5        U R                  U5        U R                  X5        U R                  S	   (       aA  U R                   (       d/  U R                  R                  U R                  S	   U5      U l        g
g
g
)r   r  s   indexr   s   revcacher   r   rZ  rW  rX  N)rY   nextr_  r#   rb  rW   r{   r&  rg  r   r   r   r   ra  r  r  r   )r   r   r   r   indexr   r   r  s           r)   r   changesettemplater._show  sp   

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

 ;;|$GGMM$&&--L(A2FG ;;y!dkk)4e<A}})*CGGI&??a'&'OGGMM!$ kk$**%dffmmC/0c(;;y!;;"ffmmDKK	,BEJ  "r,   )r_  rb  ra  rT  r   r   r&  r/  )r   r   r   r   r   __annotations__r   r   r   r   __classcell__)rs  s   @r)   rS  rS  =  s;     -,
 HM,H\ K  Kr,   rS  c                    U (       a	  U(       a   eU(       a  [         R                  " SU5      $ [         R                  " U 5      $ )Nr   )r   mapfile_templatespecliteral_templatespec)tmplrc  s     r)   templatespecr    s4    !!--lGDD--d33r,   c                B   U(       dp  U(       di  U R                  SS5      nU(       a*  [        R                  " [        R                  " U5      5      $ [
        R                  " U R                  SS5      5      nU(       d  U(       a  UnSn[        R                  R                  U5      S   (       dA  [        R                  " SU-   5      =(       d    [        R                  " U5      u  pTU(       a  Un[        R                  " SX45      $ [        R                  " U SU5      $ )	ziFind the template matching the given template spec or style

See formatter.lookuptemplate() for details.
   command-templates   logs   ui   styleNr   s   map-cmdline.r   )configr   r}  r   unquotestringr   
expandpathospathsplittry_open_templater|  lookuptemplate)rW   r~  stylerc  rs   mapnames         r)   _lookuptemplater    s     yy-v611)2I2I$2OPPOOBIIeX$>?EEww}}W%a(%77') 6,,W5 W !--lGHH##Bd;;r,   c                B    [         R                  " U5      n[        XXCS9$ )zGCreate a changesettemplater from a literal template 'tmpl'
byte-string.)r   )r   r}  rS  )rW   r[   r~  r   specs        r)   r!  r!    s!     ))$/Db@@r,   c                T   X2U4n[        XR                  S5      UR                  S5      5      nUR                  S;   a  U R                  SU5      n[	        XU/UQ76 $ UR                  (       d.  UR
                  (       d  UR                  (       d  [        X/UQ76 $ [        XU/UQ76 $ )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   templater  >      cbor   jsonr  )	r  r#   r`  r   r1  r~  rc  r   rS  )rW   r[   r'   r   r   postargsr  r6  s           r)   changesetdisplayerr    s     h'H2xx4dhhx6HID
 xx%%\\&$'!"B:::88DIIdll4844b8x88r,   c                  >   \ rS rSrSr\R                  " 5       r\R                  " 5       r\R                  " 5       r	\R                  " \R                  " \5      S9r\R                  " \R                  " \5      S9r\R                  " SS9r\R                  " \R                  " \5      S9r\R                  " SS9r\R                  " SS9r\R                  " \R                  " \5      S9r\R                  " \R                  " \5      S9r\R                  " \R                  " \5      S9r\R                  " \R                  " \5      S9r\R                  " SS9r\R                  " SS9r\R                  " SS9r\R                  " SS9r\R                  " SS9rSrg)	walkoptsi  z_Options to configure a set of revisions and file matcher factory
to scan revision/file history
)rA   NFr   Tr0   )r   r   r   r   r   r   ibr@   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(   r   r0   r,   r)   r  r    sM   
 779D779D ggiG T 23Iwwt||D12H774 Dwwt||D12H&I''%(Kggdll4&89OGGDLL./E 774<<#56L774<<#56L WWQF !% 6  $wwt4 WWT*N GGD!Er,   r  c           
     2   UR                  S5      (       a  SnOUR                  S5      (       a  SnOSnUR                  S5      (       a  U R                  SS5      (       a  S	nOS
nOSn[        S*0 SU_SU_SUR                  S/ 5      _SUR                  S/ 5      _SUR                  S/ 5      UR                  S/ 5      -   _SUR                  S5      _SUR                  S/ 5      _S[        UR                  S5      5      _S[        UR                  S5      5      _SUR                  S/ 5      _SUR                  S / 5      _S!UR                  S"/ 5      _S#UR                  S$/ 5      _S%U_S&[        UR                  S'5      5      _S(U_S)[	        U5      _6$ )+zoParse 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   descNr@   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  rC  r  r(   r0   )r#   rX   r  boolr*   )rW   r@   r'   r  r  s        r)   	parseoptsr    s    xx  	)		xx==+66$N$N  $ ((;+	 )R(488NB+GG XXg *b) txx-. .12 2. hhw# XXj"- XXj"-  !" #'txx
';"<#$ &%& tn' r,   c                   U S   n[         R                  " X2R                  UR                  5      u  pEUR	                  5       =(       d(    UR                  5       (       + =(       a    UR                  nU(       Gd	  UR                  (       a  UR                  (       a  [        UR                  5       5      n[        U5      nUn	U H^  n
U	(       d    OVX
   nU	 HH  nX;   a  UR                  U5        M  UR                  U5      (       d  M3  UR                  U5        SnUn	MJ     M`     U H*  nX;   d  M
  [        R                  " [!        S5      U-  5      e   OUR                  (       a  UR                  5        H  nX;  aY  ["        R$                  R'                  U R)                  U5      5      (       a  SnM?  [        R                  " [!        S5      U-  5      eU R+                  U5      nU(       a  M{  [        R                  " [!        S5      U-  5      e   O3UR                  5        H  nU R+                  U5      nU(       a  M  SnM!     U(       a1  UR                  5        H  nU(       a  XR,                  ;   d  M    O   SnXEU4$ )aF  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   matchandpatsr@   r'   anypatsalwaysr  r  r  r  rS   setdiscardhasdirr   
StateErrorr   r  r  existswjoinfilestore)r[   revswoptswctxr   r@   slowpath	all_filesmissing_filesrS   rr   r2   filelogr  s                  r)   _makematcherr  G  s!    :D&&tZZDKE}} LLN>u>>  <<EMM U[[]+I	NMEgAx%--a0A &--a0#' -   %**/ 	   \\[[]= ww~~djjm44#' #..!2  	   ))A,w  **ABQF ' #. [[]))A,w  $H # tzz1 & !  r,   c                   ^ ^^^^	 / m	U H2  nT U   mT	R                  U4S jTR                  U5       5       5        M4     0 mUU 4S jnUU	U4S jn[        R                  " U" 5       SS9U4$ )Nc              3  J   >#    U  H  nTU   R                  5       v   M     g 7fr/   )introfilectx).0r2   r   s     r)   	<genexpr>!_fileancestors.<locals>.<genexpr>  s!     DOqSV((**Os    #c                z   > [         R                  " TTR                  [         R                  " U 5      / 5      5      $ r/   )r   
matchfilesr#   rJ  )r   fcacher[   s    r)   filematcher#_fileancestors.<locals>.filematcher  s*    !!$

7>>#3F(KLLr,   c               3     >#    [         R                  " TTS9 H,  u  pU Vs/ s H  o"R                  5       PM     snTU '   U v   M.     g s  snf 7f)Nfollowfirst)r   filectxancestorsr  )r   csr  r  fctxsr  s      r)   revgen_fileancestors.<locals>.revgen  sD     --eMGC-/0R668R0F3KI N0s   AA
AF)iterasc)extendwalkr   generatorset)
r[   r  r   r  r  r  r  r   r  r  s
   `  `   @@@r)   _fileancestorsr    sc    E1gDCHHUODD  FM
   59;FFr,   c                    g)zDhook for extensions to override the filematcher for non-follow casesNr0   )r[   r@   r'   s      r)   _makenofollowfilematcherr    s    r,   c                     [         R                  " XX#5      $ ! [        R                   a1  n[        R                  " UR
                  S   UR                  S9eSnAff = f)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  rA   
localaliases        r)   r  r    sO    7  DD   7qvvayqvv667    A,AAc                     [         R                  " X5      $ ! [        R                   a1  n[        R                  " UR
                  S   UR                  S9eSnAff = f)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    sK    7t**   7qvvayqvv667s    A,AAc                     [         R                  " XU5      $ ! [        R                   a1  n[        R                  " UR
                  S   UR                  S9eSnAff = f)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    sO    7Z88   7qvvayqvv667r  )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                   UR                    Vs/ s H  nSU R                  U5      -   PM     snUR                  UR                  UR                  UR
                  UR                  UR                   Vs/ s H  nSU-   PM
     snS.nUR                  (       a  U(       a~  SS/nUR                   H  nUR                  SU-   5        M     UR                   H  nUR                  SU-   5        M     UR                   H  nUR                  SU-   5        M     XeS'   O:UR                  (       a)  UR                  (       d  [        UR                  5      US	'   / n[        UR!                  5       5       H  u  pU
(       d  M  ["        U	   u  pU(       a  S
U;  a  UR                  U5        M9  U(       d'  UR                  [$        R&                  " X5      5        Mg  U(       a&  U
 Vs/ s H  n[$        R&                  " X5      PM     n
nUR                  [$        R&                  " X5      5        M     UR(                  (       aU  UR                  [$        R&                  " SUR(                   Vs/ s H  n[*        R,                  " U5      PM     sn5      5        U(       a  SSR/                  U5      -   S-   nU$ SnU$ s  snf s  snf s  snf s  snf )z?Return a revset string built from log options and file patternss   literal:)r   r   r  r  r  r  r   s   r:s	   d:relpaths   p:s   i:s   x:r  r     %r     (s    and    )N)r  lookupbranchr   r"  r  r  r  r  r  r@   r   r  r  r  r  r	  r   _opt2logrevsetr   
formatspecr?  r   format_bookmark_revspecr:   )r[   r  r  bvr'   	matchargsrm  expropvalrevoplistops                r)   _makerevsetr    sB    AFO1K$"3"3A"66ONNoo))''+0;;7;a+/;7D %%( L)	AUQY' ##AUQY' $##AUQY' $(^		'	' ,[D$**,'&r*T&KKKK
--e9:@CD1z,,U6DKK
--f:; ( !!=B__M_003_M	
 hmmD))D0 K Kk P 8@ E Ns   J:4J?% K+ K	c                   UR                   (       a  [        XR                   5      nU$ UR                  (       a?  U R                  R	                  5       U R
                  :X  a  [        R                  " 5       nU$ UR                  (       a  U R                  S5      nU$ [        R                  " U 5      nUR                  5         U$ )z>Return the initial set of revisions to be filtered or followed   .)r  r  r  dirstatep1nullidr   basesetr  spansetreverse)r[   r  r  s      r)   _initialrevsr  0  s    }}mm, K 
$--**,;! K 
yy K %Kr,   c                b  ^ [        X5      nU(       d  [        R                  " 5       S4$ [        XU5      u  mp4[        R
                  " XS9nSnUR                  (       a|  U(       d  TR                  5       (       a#  [        R                  " XUR                  S:H  S9nO-UR                  (       a   e[        XTUR                  S:H  S9u  p%UR                  5         Uc   [        XR                  UR                  5      nUc  U4S jn[!        XU5      nUR"                  (       a  UR"                  S;   d   eUR"                  S:X  a^  UR%                  5       (       dH  [        R&                  " X R(                  R*                  5      n[,        R                  " [/        U5      SS	9nO9UR1                  5       (       d$  UR%                  5       (       d  UR3                  SS
9  U(       a  [,        R4                  " SU5      nU" X5      nUR6                  b  UR9                  SUR6                  5      nX%4$ )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)r@   r
   r  c                   > T$ r/   r0   )r   r   s    r)   r  makewalker.<locals>.filematcher\  s    Lr,   >   r  r  r  T)istopor  r   )r  r   r
  r  r   evolver  r  r   revancestorsr  r  r  r  r@   r'   r  r  r  toposort	changelog
parentrevsr   r  isdescendingsortr   r(   slice)	r[   r  r  r@   r  r  r  matcherr   s	           @r)   
makewalkerr  >  s    $D!4''(U;E4KK)EK||u||~~%%della>OPD6666 .Eu||q/@!D 	.tZZL	 tH-D##'99997*;;==~~dNN,E,EF~~d4j>##%%IIdI#,,tT*t"{{zz!U[[)r,   c                X    [        X5      u  p#U(       d  US4$ [        5       nX4l        X$4$ )znReturn (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  s  s4     #4/DTzF)<r,   c                   / nUR                  S/ 5       H  n UR                  SS5      u  p4 [        [        UR                  S5      5      u  pV[        S5      U-  n[        R                  " U SX75      nUR                  U[        R                  " XV5      45        M     U$ ! [         a#    [        R                  " [        S5      U-  5      ef = f! [         a#    [        R                  " [        S5      U-  5      ef = f)	zZParse --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$   r  r   parsefollowlinespatternr   r   processlinerange)	r[   r'   linerangebyfnamepat	linerangefromlinetolinemsgfnames	            r)   _parselinerangeoptr-    s    xxr*	 ZZa0NC
	J"3	(=>H FG#M//dCED))(;<	
 +    	""783> 	  	J""1%A#BS#HII	Js   B"!C"-C-C?c                F  ^ ^^ T S   n0 m[        T U5       H  u  nu  pVXC;  a"  [        R                  " [        S5      U-  5      eUR	                  U5      n[
        R                  " XuU5       Hd  u  pxUR                  5       n	U	c  [        n	X;  a  M%  TR                  U	0 5      R                  UR                  5       / 5      R                  U5        Mf     M     S mUU4S jn
UU 4S jn[        TSS9n[        5       nXl        Xl        [         R"                  " U5      U4$ )zReturn (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                    U$ r/   r0   )fctxhunkss     r)   nofilterhunksfn)getlinerangerevs.<locals>.nofilterhunksfn  s    r,   c                j   >^ TR                  [        R                  " U 5      5      mTc  T$ U4S jnU$ )Nc              3     >^#    TR                  U R                  5       5      nUb:  U H3  u  mnTc  TU4v   M  [        U4S jU 5       5      (       d  M-  TU4v   M5     g U S h  vN   g  N7f)Nc              3  X   >#    U  H  n[         R                  " TS S U5      v   M!     g7f)r  N)r   hunkinrange)r  lrhrs     r)   r  Jgetlinerangerevs.<locals>.hunksfilter.<locals>.filterfn.<locals>.<genexpr>  s'     N:R5,,RVR88:s   '*)r#   r  r   )r0  r1  
linerangeslinesr9  fctxlinerangess       @r)   filterfn7getlinerangerevs.<locals>.hunksfilter.<locals>.filterfn  sf     '++DIIK8J%!&IBz %i N:NNN %i "' !  s   AA.A.&A,'A.)r#   r   rJ  )r   r>  r=  linerangesbyrevr2  s     @r)   hunksfilter%getlinerangerevs.<locals>.hunksfilter  s4    (,,W^^C-@A!""
	! r,   c                   > [        TR                  [        R                  " U 5      / 5      5      n[        R                  " TU5      $ r/   )r  r#   r   rJ  r  )r   rS   r@  r[   s     r)   r  %getlinerangerevs.<locals>.filematcher  s6    _(()<bAB!!$..r,   Tr  )r-  r   r  r   filectxr   blockancestorsintrorevr   
setdefaultr  r   r	  r   r   r   r   r
  )r[   userrevsr'   r  r,  r)  r*  r0  r(  r   rA  r  r  r   r@  r2  s   `             @@r)   getlinerangerevsrJ    s    :D O%7d%C!!""DEM  ||E"$33DFKOD--/C{"&&sB/::		RfY  L &D &/ /40DF))D!6))r,   c                J  ^ U R                  SS5      nU(       d  [        R                  $ [        R                  " U5      n[        U[        5      (       a  UR                  nO[        R                  " U 5      n[        R                  " X[        R                  US9mU4S jnU$ )Nr  s	   graphnoder  c                .   > XS.nTR                  U5      $ )N)r  s   repo)r#  )r[   r   rV  r   templs       r)   
formatnode'_graphnodeformatter.<locals>.formatnode  s    ,""5))r,   )r  r   getgraphnoder   r  
isinstancerS  rT  r   r   r!  r"  )rW   	displayerr  r%  rN  rM  s        @r)   _graphnodeformatterrS    s    99)<8D&&&""4(D)/00$$**2.##
:..$E* r,   c           
     
   U=(       d    0 n[        X5      n[        R                  " 5       nUR                  n	U R	                  S5      (       a&  U	R                  [        R                  U	S5      5        O[        R                  [        R                  [        R                  S.n
U
R                  5        H.  u  pU R                  SSU-  X   5      X'   X   (       a  M*  S X'   M0     U R                  SS5      Ul        0 nU H  u  pnnU" UUU5      nU(       a  U" U5      OS nU" UUXU5      n[        U5      nUS   nUR                   " U4UUS.["        R$                  " U5      D6  UR&                  R)                  U5      R+                  S	5      nUS
   (       d  US
	 UR-                  U5        [.        R0                  " U/U5       H$  u  nnnn[        R2                  " XUUUU5        / nM&     M     UR5                  5         g )Nr     |)r   s   grandparents   missingr  s   graphstyle.%ss   graphshortenr  )r   r   r   )rS  r   
asciistatestylesrt   rf  dictfromkeysPARENTGRANDPARENTMISSINGPARENTr   r  rX   graphshortenrv  r   r   	strkwargsr   popr  r   r]  chainasciir   )rW   r[   dagrR  edgefn	getcopiesr   rN  staterX  	edgetypesr  r  formatnode_cacher   typer   rA  charr   edges	firstedgerh   r<  coldatas                            r)   displaygraphrn    s   KRE$R3J!E\\F 
xxdmmFD12  $00 ..
	
 #*ID))!1D!8&+FK ;;" +  ]]?OL#&3$%56#,3$tT5w7K	!	
5	
4<4F4Fu4M	
 ""3'--e4Ryb	*3//9+u*M&D$wNN2dD%AE +N $'  OOr,   c                h    [         R                  " X5      n[        XXS[         R                  U5        g r/   )r   	dagwalkerrn  
asciiedges)rW   r[   r  rR  
getrenamedrevdags         r)   displaygraphrevsrt    s&    +F6h.A.A:Nr,   c                    U H8  nX   nU(       a  U" U5      OS nUR                  XgS9  UR                  U5        M:     UR                  5         g )NrG  )r   r   r   )rW   r[   r  rR  re  r   r   r   s           r)   displayrevsrv  $  sF    i#,3$s*	 
 OOr,   c                    S HE  nX!;   d  M
  X   (       d  M  [         R                  " [        S5      UR                  SS5      -  5      e   g )N)s   newest_firsts+   -G/--graph option is incompatible with --%s   _   -)r   r&   r   replace)r@   r'   r   s      r)   checkunsupportedgraphflagsr{  -  sF    :$((""@A**T4()   r,   c                t    [        U5      nUR                  5         Ub  US U n[        R                  " X5      $ r/   )r*   r  r   nodes)r[   r}  r'   r(   s       r)   	graphrevsr~  6  s4    TNE	MMOfu>>$&&r,   )NFr,   r,   N)NFNr   r,   r,   FN)returnzformatter.templatespecr   )NF)rW   r   r@   zSequence[bytes]r'   zDict[bytes, Any]r  r  )r  Nr/   )r[   r   r  r  r  zETuple[smartset.abstractsmartset, Optional[Callable[[Any], MatcherT]]])r[   r   r  r  r  z;Tuple[smartset.abstractsmartset, Optional[changesetdiffer]])NN)M
__future__r   r]  r  r9   typingr   r   r   r   r   r	   i18nr   interfaces.typesr   r   r   
thirdpartyr   TYPE_CHECKING r   r   r   r   r   r   rU   r   r   r   r   r   r   r   r   r   r   r   utilsr    r!   r*   re   r   r   r   r   r1  rS  r  r  r!  r  sr  r  r  r  r  r  r  r  r  r  r  r  r  r-  rJ  rS  rn  rt  rv  r{  r~  r0   r,   r)   <module>r     s   #  	       
    &, 		E^ 		Vr/ /dB! B!JJ.) J.ZdK) dKN4<8A96 *" *" *"Z,,
, , 	,^]!@G0
	7	7	7 )&/ &)(,"
8v2
22 K2j
 A 0<*~,,^O
'r,   