
    6hL                    2   % 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JrJr  SSKJ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  \R8                  " S	5      rS
\S	'   \R8                  " S5      rS\S'   \R@                  r \RB                  r!\RD                  r"\RF                  r#\R:                  r$\RJ                  r%\RL                  (       a*  \\'   r( \\)\)\)\)4   r* \\)\)4   r+ \\RX                  \'4   r-  " S S5      r.\." 5       r/SSS jjr0            SS jr1S S jr2      S!S jr3S"S#S jjr4   S$           S%S jjr5\/4                 S&S jjr6\/4       S'S jjr7S(S jr8S)S jr9S r:S*S jr;S+S jr<S,S jr=g)-    )annotationsN)IterableIteratorListOptionalSequenceTupleUnioncast   )_)
diffhelperencodingerrorpolicypycompatutil)modules)dateutilbdiffzintmod.BDiffmpatchzintmod.MPatchc                      \ rS rSrSrSr0 SS_SS_SS_S	S_S
S_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_rS rS rS r	\
R                  " \	5      rSrg)diffoptsD   a  context is the number of context lines
text treats all files as text
showfunc enables diff -p output
git enables the git extended patch format
nodates removes dates from diff headers
nobinary ignores binary files
noprefix disables the 'a/' and 'b/' prefixes (ignored in plain mode)
ignorews ignores all whitespace changes in the diff
ignorewsamount ignores changes in the amount of whitespace
ignoreblanklines ignores changes whose lines are all blank
upgrade generates git diffs to avoid data loss
Ts   context   s   textFs   showfuncs   gits   nodatess   nobinarys   noprefixs   indexr   s   ignorewss   ignorewsamounts   ignorewseols   ignoreblankliness   upgrades   showsimilaritys   worddiffs   xdiffc                   [         R                  " U5      nU R                  R                  5        HG  nUR	                  U5      nUc  U R                  U   n[        U [         R                  " U5      U5        MI      [        U R                  5      U l        g ! [         aA    [        R                  " [        S5      [         R                  " U R                  5      -  5      ef = f)Ns3   diff context lines count must be an integer, not %r)r   byteskwargsdefaultskeysgetsetattrsysstrintcontext
ValueErrorr   
InputErrorr   bytestr)selfoptskvs       1/usr/lib/python3/dist-packages/mercurial/mdiff.py__init__diffopts.__init__g   s    ##D)##%AAyMM!$D(//!,a0	 &	t||,DL 	""HI""4<<01 	s   =B AC#c           
         U R                    Vs0 s H#  o"[        U [        R                  " U5      5      _M%     nn[        R                  " U5      nUR                  U5        [        S0 UD6$ s  snf )N )r   getattrr   r"   	strkwargsupdater   )r(   kwargsr*   r)   s       r,   copydiffopts.copyw   s]    >BmmLm74!344mL!!$'F$ Ms   *A-c                N   ^  SR                  U 4S jT R                   5       5      $ )Ns   , c           	   3  n   >#    U  H*  nS U[        T[        R                  " U5      5      4-  v   M,     g7f)s   %s: %rN)r1   r   r"   ).0r*   r(   s     r,   	<genexpr>%diffopts.__bytes__.<locals>.<genexpr>~   s2      
" GD(//!*<=>>"s   25)joinr   )r(   s   `r,   	__bytes__diffopts.__bytes__}   s%    zz 
]]
 
 	
    r$   N)__name__
__module____qualname____firstlineno____doc___HAS_DYNAMIC_ATTRIBUTESr   r-   r5   r=   r   	strmethod__str____static_attributes__r0   r?   r,   r   r   D   s     #A 	U 		
 	E 	U 	U 	! 	U 	5 	 	U 	E 	5 	U  	%!H&  
   +Gr?   r   c                t   U R                   (       a  [        R                  US5      nO'U R                  (       a  [        R                  US5      nU(       a8  U R                  (       a'  [
        R                  " SSU5      R                  S5      nU R                  (       a  [
        R                  " SSU5      nU$ )NTFs   
+   
s   [ \t\r\f]+\ns   \n)	ignorewsr   fixwsignorewsamountignoreblanklinesresubstripignorewseol)r)   textblanks      r,   wscleanrV      s{    }}{{4&			{{4'&&vvfeT*007vv&5Kr?   c              #    #    U Vs/ s H   n[        XE5      =(       a    S=(       d    SPM"     nnU Vs/ s H   n[        XE5      =(       a    S=(       d    SPM"     nnS[        U5      pvS[        U5      pXg:  d  X:  a  XhSpn
X:  d  X   S:X  d  X:  d  X;   S:X  aE  SnX:  a  X   S:X  a  U
S-  n
X:  a
  X   S:X  a  M  X:  a  X;   S:X  a  US-  nX:  a
  X;   S:X  a  M  O6X:  a1  X   S:X  a)  X;   S:X  a!  U
S-  n
US-  nX:  a  X   S:X  a
  X;   S:X  a  M!  X-   X
-   X(-   X+-   4U4v   U
nUnXg:  a  M  X:  a  M  g g s  snf s  snf 7f)Nr   r      =   ~)rV   len)base1lines1base2lines2r)   ls1e1s2e2i1i2btypes                r,   
splitblockrg      s_     6<<Vwt%A**VF<5;<Vwt%A**VF<FF
'RW8vzQ"(fjAoE'fjAoa 'fjAo'fjAoa 'fjAo 'fjAo&*/aa 'fjAo&*/ z5:uz5:>EE! 'RW	 =<s9   E'D>E'EA#E E!5EE5E<Ec                6    U u  p#Uu  pEXBU-   :  =(       a    X%:  $ )a  Return True if `hunk` defined as (start, length) is in `linerange`
defined as (lowerbound, upperbound).

>>> hunkinrange((5, 10), (2, 7))
True
>>> hunkinrange((5, 10), (6, 12))
True
>>> hunkinrange((5, 10), (13, 17))
True
>>> hunkinrange((5, 10), (3, 17))
True
>>> hunkinrange((5, 10), (1, 3))
False
>>> hunkinrange((5, 10), (18, 20))
False
>>> hunkinrange((5, 10), (1, 5))
False
>>> hunkinrange((5, 10), (15, 27))
False
r0   )hunk	linerangestartlength
lowerbound
upperbounds         r,   hunkinrangero      s(    * ME&J&=5+==r?   c                   Uu  p#Su  pE/ nU  H  nUu  u  ppnX*:  a  X;::  a  US:X  a  X*-
  U-   nX:-
  U-   nO>Xs=::  a  U:  a  O  OUS:X  a  XU-
  -
  nOUnXs=:  a  U::  a  O  OUS:X  a  XU
-
  -   nOU	n[        XU
-
  4U5      (       d  M  UR                  U5        M     Ub  Ub  XT:  a  [        R                  " [	        S5      5      eXdU44$ )a  filter `blocks` like (a1, a2, b1, b2) from items outside line range
`rangeb` from ``(b1, b2)`` point of view.

Return `filteredblocks, rangea` where:

* `filteredblocks` is list of ``block = (a1, a2, b1, b2), stype`` items of
  `blocks` that are inside `rangeb` from ``(b1, b2)`` point of view; a
  block ``(b1, b2)`` being inside `rangeb` if
  ``rangeb[0] < b2 and b1 < rangeb[1]``;
* `rangea` is the line range w.r.t. to ``(a1, a2)`` parts of `blocks`.
)NNrX   s   line range exceeds file size)ro   appendr   r&   r   )blocksrangeblbbubblbaubafilteredblocksblocka1a2b1b2stypes                r,   blocksinranger      s     HCHCN"'%9u} (R-C(R-C~2~D=S/CC~2~D=b/CC"W//!!%(' ( {ckSYq!@ABB:%%r?   c                    U b'  U R                   (       a  [        [        SS 5      (       d  [        R                  $ [        R                  $ )Nxdiffblocks)xdiffr1   r   rr   r   r)   s    r,   chooseblocksfuncr      s3    zzumT22||   r?   c           
   #    #    Uc  [         nUR                  (       d"  UR                  (       d  UR                  (       a  [	        X S5      n [	        X!S5      n[        U5      " X5      n[        U5       H  u  pgUS:  a  XVS-
     nOSnUS   US   US   US   4nUS   US   :w  d  US   US   :w  a  Sn	UR                  (       ai  Uc  [        U 5      nUc  [        U5      n[	        US	R                  X8S   US    5      5      n
[	        US	R                  XHS   US    5      5      nX:X  a  S
n	X4v   US4v   M     g7f)aJ  Return (block, type) tuples, where block is an mdiff.blocks
line entry. type is '=' for blocks matching exactly one another
(bdiff blocks), '!' for non-matching blocks and '~' for blocks
matching only after having filtered blank lines.
line1 and line2 are text1 and text2 split with splitnewlines() if
they are already available.
NFr   r   )r   r   r   r   r         !r?   rY   rX   )
defaultoptsrL   rN   rS   rV   r   	enumeraterO   splitnewlinesr<   )text1text2r)   r\   r^   diffir`   stypeoldnews               r,   	allblocksr     s?     |}}++t/?/?U+U+D!%/D4
 q5UAAqT2a5!A$1& Q41Q4<1Q41Q4<D$$>*51F>*51FdCHHVaD1Q4-@$ABdCHHVaD1Q4-@$AB:D'M$h3 !s   D<D>c                  ^ SSU4S jjjn/ S4n	U (       d	  U(       d  U	$ TR                   (       a  S=pOSn
Sn[        R                  " S5      n[        R                  " U5      n[        R                  " U5      nU(       a:  U (       a&  U(       a  [        U 5      [        U5      :X  a  X:X  a  U	$ / nSSU-  /44nGOU (       d  UR                  S	5      (       + n[        U5      nU c  S
U" U5      -  nOSXU" X5      4-  nSX-   U" X55      4-  nUU/n[        U5      nSSSU4nSU-  /U Vs/ s H  nSU-   PM
     sn-   nU(       a,  US==   S	-  ss'   UR                  [        R                  5        UU44nOU(       d  U R                  S	5      (       + n[        U 5      n SXU" X5      4-  nUc  SU" U5      -  nOSXU" X55      4-  nUU/n[        U 5      nSUSS4nSU-  /U  Vs/ s H  nSU-   PM
     sn-   nU(       a,  US==   S	-  ss'   UR                  [        R                  5        UU44nO6[        XTS9n[        U5      (       d  U	$ SXU" X5      4-  SXU" X55      4-  /nU[        SU5      4$ s  snf s  snf )ad  Return a unified diff as a (headers, hunks) tuple.

If the diff is not null, `headers` is a list with unified diff header
lines "--- <original>" and "+++ <new>" and `hunks` is a generator yielding
(hunkrange, hunklines) coming from _unidiff().
Otherwise, `headers` and `hunks` are empty.

Set binary=True if either a or b should be taken as a binary file.
Nc                p   > TR                   (       d  TR                  (       d  SU -  $ U(       a  SU;   a  gg)Ns   	%s       	r?   )gitnodates)datefnr)   s     r,   datetagunidiff.<locals>.datetagH  s)    xxT>!$"*r?   r0   r?   s   a/s   b/)r   r   s   Binary file %s has changed
rK   s   --- /dev/null%ss
   --- %s%s%ss   +++ %s%sr   r   s   @@ -0,0 +1,%d @@
   +s   +++ /dev/null%ss
   +++ %s%s%ss   @@ -1,%d +0,0 @@
   -r   z/Iterable[Tuple[Optional[HunkRange], HunkLines]]N)r   bytesr   Optional[bytes])noprefixr   datestrr   pconvertrZ   endswithr   rq   r   MISSING_NEWLINE_MARKER_unidiffnextr   )aadbbdfn1fn2binaryr)   r   sentinelaprefixbprefixepochheaderlineshunkswithout_newlinel1l2size	hunkrangee	hunkliness          `              r,   unidiffr   4  s   (  2vHQ}}'V$E
--
C
--
Cs1vQ'AFO83>?@Bjj//!9#gen4B'0@!AABGM72+;<<2h1v1dO	*T125J1dQh5JJ	bMU"MZ>>?Y')jj//!gGB,<==9#gen4B'0@!AAB2h1vaO	*T125J1dQh5JJ	bMU"MZ>>?Y')D)E{{O W72+;<<W72+;<<
 95  C 6K  6Ks   -I:)I?c              #    ^ ^^^^^^#    [        T 5      m[        T5      mU4S jmU4S jnSS/m    SUUUUUU U4S jjnSnSnSn[        T TTTT5       GH  u  pUu  ppU	S:w  a  U	S	:X  a  XmU-
  X-
  -
  -  nM%  / nTX nTX nX-  nX-  nU" U
5      nU" U5      nSnU(       aC  UUS
   TR                  -   S
-   :  a  UnUS
   nUS   nOU(       d  SnSv   U" U5       Sh  vN   U(       a  US   XS   XS   4nUS   nOUUUX4nTUU
  Vs/ s H  nSU-   PM
     snU[        U5      S& U Vs/ s H  nSU-   PM
     snU[        U5      S& U Vs/ s H  nSU-   PM
     snU[        U5      S& GM      U(       a  U(       d  SnSv   U" U5       Sh  vN   gU(       d  Sv   gg Ns  snf s  snf s  snf  N#7f)a  Yield hunks of a headerless unified diff from t1 and t2 texts.

Each hunk consists of a (hunkrange, hunklines) tuple where `hunkrange` is a
tuple (s1, l1, s2, l2) representing the range information of the hunk to
form the '@@ -s1,l1 +s2,l2 @@' header and `hunklines` is a list of lines
of the hunk combining said header followed by line additions and
deletions.

The hunks are prefixed with a bool.
c                4   > U TR                   -   nX!:  a  UnU$ r   r@   )r_   rZ   retr)   s      r,   
contextend_unidiff.<locals>.contextend  s     $,,9C
r?   c                4   > U TR                   -
  nUS:  a  gU$ Nr   r@   )r_   r   r)   s     r,   contextstart_unidiff.<locals>.contextstart  s     $,,7
r?   r   r?   c              3    >#    U u  pp4nT" U[        T5      5      nXa-
  nXC-
  U-   U-
  nSn	TR                  (       a{  Tu  p[        US-
  U
S-
  S5       H[  nTU   SS R                  5       (       d  M   STU   R	                  5       -   n	[
        R                  " U	5      (       a  U	S S n	U	TS'     O   UTS'   U(       a  US-  nU(       a  US-  nXX84nSX4-   -  /U-   [        X&5       Vs/ s H  nSTU   -   PM     sn-   nSnTR                  S	5      (       d  X-   [        T5      S-   :X  a  [        [        U5      S-
  SS5       Hf  nX   R                  S
5      (       d  M  X   R                  S5      (       a  SnX==   S	-  ss'   UR                  US-   [        R                  5          O   U(       d  TR                  S	5      (       d}  X8-   [        T5      S-   :X  ai  [        [        U5      S-
  SS5       HL  nX   R                  S5      (       d  M  X==   S	-  ss'   UR                  US-   [        R                  5          O   X4v   g s  snf 7f)Nr?   r   r   r   r   )   s   @@ -%d,%d +%d,%d @@%s
FrK   )r   r   Tr   )rZ   showfuncrangeisalnumrstripr   
isasciistrr   
startswithinsertr   r   )ri   astartr{   bstartr}   deltaaendalenblenfunclastposr   r   xr   skipr   r   r   lastfuncr)   t1t2s                   r,   	yieldhunk_unidiff.<locals>.yieldhunk  sU     +/'V"c"g&}{T!B&==$MG 6A:w{B7a51:%%''"Q%,,.0D  **400#CRy"&HQK 8 !HQK aKFaKF&.	'9w+>?@%*2_5_tbe|_56 	 {{5!!fms2w{&B3y>A-r26<**<88 |..t44#LE)L$$QUJ,M,MN 7 BKK..6=CGaK3O3y>A-r26<**400LE)L$$QUJ,M,MN	 7
 ""- 6s'   A-I4A8I,I>A#I%B0I>INFr   rY   r   r   Tr      r   r   r   )ri   z&Tuple[int, int, int, int, List[bytes]]returnz%Iterable[Tuple[HunkRange, HunkLines]])r   r   r$   rZ   )r   r   r)   r   r   ri   ignoredlines	has_hunksr   r~   rz   r{   r|   r}   r   r   r   r   r   prevr   r   r   r   r   s   ```                  @@@@r,   r   r     s     
r	B	r	B 3xH<#4<#	.<# <#D DLIb"dB3D=}
 bRW 55ii

b!b!Q$,,.22aa  $IJ$T?**GRa"1g6DGE B2D13F2?Atax?c%jl145Atax5c%jl145Atax5c%jlQ 4T IJT?"" % + @55 	#sH   CF>%F+&,F>F-!F>4F2F>F7%3F>F<F>-F>c                J   S nSS jnU c  Sn Uc  SnX:X  a  g/ nUR                  S5        UR                  S[        U5      -  5        U" [        R                  " U5      5       H  nUR                  U" U5      5        M     UR                  S5        SR	                  U5      $ )z print base85-encoded binary diffc                    [        U 5      nUS::  a&  [        R                  " [        S5      U-   S-
  5      nO([        R                  " US-
  [        S5      -   S-
  5      nSU[        R
                  " U S5      4-  $ )N      Ar      as   %c%s
T)rZ   r   bytechrordr   	b85encode)liner_   s     r,   fmtlineb85diff.<locals>.fmtline-  sl    I7  TQ!23A  R#d)!3a!78AAt~~dD9:::r?   c              3  X   #    [        U 5      nSnX2:  a  XX1-    v   X1-  nX2:  a  M  g g 7fr   )rZ   )rT   csizer_   r   s       r,   chunkb85diff.<locals>.chunk5  s3     Ie19%%JA es   $**r?   s   GIT binary patch
s   literal %d
rK   )4   )rq   rZ   zlibcompressr<   )totnr   r   r   r_   s         r,   b85diffr   *  s    ; 
z	z	x CJJ$%JJR()4==$%

71: &JJu88C=r?   c                    Sn/ nU[        U 5      :  aN  [        R                  " SXUS-    5      u  p4nUS-  nUR                  XX-    5        X-  nU[        U 5      :  a  MN  SR	                  U5      $ )Nr      >lll   r?   )rZ   structunpackrq   r<   )binpostp1p2r_   s         r,   	patchtextr  O  st    
C
A
C.MM'3S2X+>?	r		37#$	 C.
 88A;r?   c                z    [        U 5      S:X  a  [        R                  " US5      $ [        R	                  X/5      $ )Nr   r   )rZ   r   bufferr   patches)r   r   s     r,   patchr	  Z  s/    
1v{{{3##>>!U##r?   c                z    [         R                  X5       Vs/ s H  o"S   US   US   US   -
  4PM     sn$ s  snf )Nr   r   r   )r   rr   )r   r   ds      r,   get_matching_blocksr  b  s>    /4||A/AB/A!qT1Q41!%/ABBBs   8c                F    U (       a  [         R                  " SSSU 5      $ S$ )Nr   r   r?   r   pack)rl   s    r,   trivialdiffheaderr  f  s    176;;w1f-@S@r?   c                2    [         R                  " SSX5      $ )Nr   r   r  )oldlennewlens     r,   replacediffheaderr  j  s    ;;w622r?   )T)r)   r   rT   r   rU   boolr   r   )r[   r#   r\   Iterable[bytes]r]   r#   r^   r  r)   r   r   Iterable[TypedBlock])ri   zTuple[int, int]rj   Ranger   r  )rr   r  rs   r  r   zTuple[List[TypedBlock], Range]r   )r)   Optional[diffopts]r   zintmod.BDiffBlocksFnc)NNN)r   r   r   r   r)   r  r\   Optional[Sequence[bytes]]r^   r  r   r  )r   r   r   r   r   r   r   r   r   r   r   r   r   r  r)   r   r   zCTuple[List[bytes], Iterable[Tuple[Optional[HunkRange], HunkLines]]])r   r   r   r   r)   r   r   z2Iterator[Union[bool, Tuple[HunkRange, HunkLines]]])r   r   r   r   r   r   )r   r   r   r   )r   r   r   r   r   zList[Tuple[int, int, int]])rl   r#   r   r   )r  r#   r  r#   r   r   )>
__future__r   rP   r   typingr   r   r   r   r   r   r	   r
   r   i18nr    r   r   r   r   r   r   
interfacesr   intmodutilsr   	importmodr   __annotations__r   rr   rM   r  patchedsizetextdiffr   TYPE_CHECKINGr   	HunkLinesr#   	HunkRanger  
BDiffBlock
TypedBlockr   r   rV   rg   ro   r   r   r   r   r   r   r  r	  r  r  r  r0   r?   r,   <module>r+     s   # 	   	 	 	   &&w/| /((2 2	
..  ;;##	UINc3S()IJ #s(OE1v((%/0J&?, ?,D j	  	
  @>4'& '&*/'&#'&T!  $(,(,--- - &	-
 &- -p !]]] ] 		]
 
] 
] ] ] I]B ,7SSS (S7Sl"J$CA3r?   