
    rcRe                        d dl Z d dlmZ ddlmZmZ ddlmZ  edd          Z edd	          Z	 ed
d          Z
dZ e j        d          Z e j        d          Z e j        dez   dz             Z e j        dez   dz             Z e j        d          Z e j        d          Z e j        dez   dz             Z e j        dez   dz             Z e j        d          Z e j        d          Z e j        d          Z e j        d          Z e j        d          Z e j        d          Z e j        d          Z e j        d          Z e j        d          Z e j        d          Z e j        d          Z e j        d           Z  e j        d!          Z! e j        d"          Z" e j        d#          Z# e j        d$          Z$ e j        d%          Z%eZ&eZ'eZ( e j        d&          Z) e j        d'          Z*eZ+ e j        d(          Z, e j        d)          Z- e j        d*          Z. e j        d+          Z/d, Z0d- Z1d. Z2d/ Z3d0 Z4d1 Z5d2 Z6d3 Z7d4 Z8d5 Z9d6 Z:d7 Z;d8 Z<d9 Z=d: Z>d; Z?dS )<    N)
namedtuple   )split_by_regexfindall_regex)
exceptionsheaderz4index_path old_path old_version new_path new_versiondiffzheader changes textChangezold new line hunkz(.+?)(?:	|:|  +)(.*)z^diff.* (.+) (.+)$z^Index: (.+)$z^--- $z^\+\+\+ z(^@@ -(\d+),?(\d*) \+(\d+),?(\d*) @@(.*)$z^([-+ ])(.*)$z^\*\*\* z ^\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*$z^\*\*\* (\d+),?(\d*) \*\*\*\*$z^--- (\d+),?(\d*) ----$z^([-+ !]) (.*)$z^(\d+),?(\d*)([acd])$z^.$z^([ad])(\d+) ?(\d*)$z!^(\d+),?(\d*)([acd])(\d+),?(\d*)$z^---$z^([><]) (.*)$z^diff --git a/(.+) b/(.+)$z'^index ([a-f0-9]+)..([a-f0-9]+) ?(\d*)$z
^--- (.+)$z^\+\+\+ (.+)$z^(new|deleted) file mode \d{6}$z"^Binary files (.+) and (.+) differz=== (.+)z#\((?:working copy|revision (\d+))\)z.*(\(.*\))$z^RCS file: (.+)(?:,\w{1}$|$)z(.+)\t([\d.]+)z:([\d.]+)\t(.+)z^diff.* (.+):(.*) (.+):(.*)$c              #     K   	 |                                  }n# t          $ r | }Y nw xY wd |D             }t          t          t          t
          t          t          g}|D ]'}t          ||          }t          |          dk    r n(|D ]P}d
                    |          dz   }t          |          }t          |          }|s|rt          |||          V  Qd S )Nc                 l    g | ]1}t          |          d k    r|n|                                d          2S )r   )len
splitlines).0xs     2lib/python3.11/site-packages/whatthepatch/patch.py
<listcomp>zparse_patch.<locals>.<listcomp>J   s8    DDD#a&&A+4QQ1<<>>!#4DDD    r   
)r   changestext)r   AttributeErrorunified_header_indexdiffcmd_headercvs_header_rcsgit_header_indexcontext_header_old_lineunified_header_old_liner   r   joinparse_header
parse_diffdiffobj)	r   linescheckcdiffsr	   difftexthds	            r   parse_patchr*   B   s!     !!   
 EDeDDDE 	E   ua((u::> 	E	  > >99T??T)t 	> 	>AH======> >s    ((c                 F    t          |           }|t          |           }|S )N)parse_scm_headerparse_diff_header)r   r(   s     r   r    r    b   s)    A $d##Hr   c                    	 |                                  }n# t          $ r | }Y nw xY wt          t          ft          t
          ft          t
          ft          t          fg}|D ]\  }}t          ||          }t          |          dk    rt          |t                    }t          |          dk    r ||          }|rq|j        }|j        }	|                    d          r
|dd          }|	                    d          r
|	dd          }	t          |j        ||j        |	|j                  c S n ||          }|c S d S )Nr   a/   b/
index_pathold_pathold_versionnew_pathnew_version)r   r   r   parse_git_headerold_cvs_diffcmd_headerparse_cvs_headerr   svn_header_indexparse_svn_headerr   r   git_diffcmd_headerr4   r6   
startswithr   r3   r5   r7   )
r   r#   r$   regexparserr&   git_optresr4   r6   s
             r   r,   r,   i   s   !!    
+,	!12	)*	+,	E   veU++u::> 	#E+=>>G7||a $fUmm "|H"|H**400 0#+ABB<**400 0#+ABB<!#&>!)$'O!)$'O     " fUmmJJJ/	2 4    &&c                 2   	 |                                  }n# t          $ r | }Y nw xY wt          t          ft          t
          ft          t          ft          t          fg}|D ]5\  }}t          ||          }t          |          dk    r ||          c S 6d S Nr   )r   r   unified_header_new_lineparse_unified_headerr   parse_context_headerr   parse_diffcmd_headergit_header_new_liner8   r   r   )r   r#   r$   r?   r@   r&   s         r   r-   r-      s    !!    
!"67	 "67	-. 
./E  ! !veU++u::> 	!6%==   	! 4rC   c                 L   	 |                                  }n# t          $ r | }Y nw xY wt          t          ft          t
          ft          t          ft          t          ft          t          fg}|D ]5\  }}t          ||          }t          |          dk    r ||          c S 6d S rE   )r   r   unified_hunk_startparse_unified_diffcontext_hunk_startparse_context_diffdefault_hunk_startparse_default_diffed_hunk_startparse_ed_diffrcs_ed_hunk_startparse_rcs_ed_diffr   r   )r   r#   r$   hunkr@   r&   s         r   r!   r!      s    !!    
/0	/0	/0	&	-.E  ! !feT**u::> 	!6%==   	!! !rC   c                    	 |                                  }n# t          $ r | }Y nw xY wd }d }d }d }d }d }|D ]}t                              |          }	|	r+|	                    d          }|	                    d          }Jt
                              |          }
|
r+|
                    d          }|
                    d          }t                              |          }|r|                    d          }t                              |          }|r|                    d          }t                              |          }|r*|                    d          }|                    d          }|rV|rT|	                    d          r
|dd          }|	                    d          r
|dd          }t          d ||||          c S |rw|ru|rs|rqt          d           |	                    d          r
|dd          }|	                    d          r
|dd          }t          d |dk    rdn|||dk    rdn||          S d S )	Nr   r0   r/   r1   r2   zreturning from dumb path0000000z	/dev/null)r   r   r=   matchgroupr   git_header_old_linerJ   git_header_binary_filer>   r   print)r   r#   r5   r7   r4   r6   cmd_old_pathcmd_new_pathlinehmgonbinarys                 r   r8   r8      s   !!    KKHHLL ' '%%d++ 	88A;;L88A;;L""4(( 	''!**K''!**K  %%d++ 	"wwqzzH%%d++ 	"wwqzzH'--d33 	'||AH||AH 	 	""4(( (#ABB<""4(( (#ABB<!'!'       
 
 
 
()))""4(( 	,'+L""4(( 	,'+L %09$<N[[,#$/9$<N[[,#
 
 
 	
 4rC   c                    	 |                                  }n# t          $ r | }Y nw xY wt          |t                    }t	          |          dk    rd S t	          |          dk    r
t                              |d                   }|d= |s:t          |          }|sMt          |                    d          |                    d          d |                    d          d           S |j	        }|j
        }|rTt                              |          }|r7|                    d          r"t          |                    d                    }n|rt                              |          }|r|d t	          |                    d                              }t                              |                    d                    }|r7|                    d          r"t          |                    d                    }|j        }	|j        }
|
rYt                              |j                  }|r7|                    d          r"t          |                    d                    }
n|	rt                              |	          }|r|	d t	          |                    d                              }	t                              |                    d                    }|r7|                    d          r"t          |                    d                    }
t!          |          t          k    rd }t!          |
          t          k    rd }
t          |                    d          |||	|
          S d S )Nr   r   r2   )r   r   r   r;   r   rY   r-   r   rZ   r4   r5   svn_header_timestamp_versionintsvn_header_timestampr6   r7   type)r   r#   headersidiff_headeropathoveroendtsnpathnvernends               r   r<   r<     sH   !!    E#344G
7||q t
e**q. 8
""58,,!H 	'.. 	771::      $& 
	./55d;;D *

1 *4::a==)) 	.%++E22B .1RXXa[[!1!1 112399"((1++FF .DJJqMM .tzz!}}--D$& 
	./55k6MNND *

1 *4::a==)) 	.%++E22B .1RXXa[[!1!1 112399"((1++FF .DJJqMM .tzz!}}--D:: 	D:: 	Dwwqzz
 
 
 	
 4rC   c                    	 |                                  }n# t          $ r | }Y nw xY wt          |t                    }t          |t                    }|rt          |          dk    rt                              |d                   }|d= |s:t          |          }|r	|j	        }|rct                              |          }t                              |          }|r|                    d          }n|r|                    d          }|j        }	|	rct                              |	          }
t                              |	          }|
r|
                    d          }	n|r|                    d          }	t          |                    d          |j        ||j        |	          S t          |                    d          |                    d          d |                    d          d           S n`|r]t          |          dk    rIt                              |d                   }|d= |s:t                              |d                   }|sMt          |                    d          |                    d          d |                    d          d           S t          |           |                    d          r|                    d          nd }|                    d          r|                    d          nd }	t          |                    d          |                    d          ||                    d          |	          S d S )Nr   r0   r   r2         )r   r   r   r   r9   r   cvs_header_indexrY   r-   r5   cvs_header_timestampcvs_header_timestamp_colonrZ   r7   r   r4   r6   )r   r#   rk   headers_oldrl   rm   ro   rp   oend_crs   rt   nend_cr)   s                r   r:   r:   S  sL   !!    E>22G'=>>K F%jj1n '	 &&uQx00Aa +E22K ". //55d;;D7==dCCF /#zz!}} /%||A". //55d;;D7==dCCF /#zz!}} /%||A wwqzz(1 $(1 $    771::     C'	P 
 %jj1n 	 &&uQx00Aa &,,U1X66A  wwqzzWWQZZ $WWQZZ $    e$$$!"51771:::D!"51771:::D771::      4rC   c                    	 |                                  }n# t          $ r | }Y nw xY wt          |t                    }t	          |          dk    rd S t	          |          dk    rrt                              |d                   }|d= |r:t          d |                    d          d |                    d          d           S t	          |          dk    rd S Nr   r   r0   r2   )r   r   r   r   r   rY   r   rZ   )r   r#   rk   r)   s       r   rI   rI     s    !!    E>22G
7||q t
e**q. 
  q**!H 	     	 e**q. 
 4rC   c                    	 |                                  }n# t          $ r | }Y nw xY wt          |t                    }t	          |          dk    rd S t	          |          dk    rt
                              |d                   }|d= |rt                              |d                   }|d= |r|                    d          }t	          |          dk    rd }|                    d          }t	          |          dk    rd }t          d |                    d          ||                    d          |          S t	          |          dk    d S r   )	r   r   r   rF   r   r   rY   rZ   r   r   r#   rk   rc   rd   ro   rs   s          r   rG   rG     e   !!    E#:;;G
7||q t
e**q. #))%(33!H 	'--eAh77Aa wwqzzt99>  Dwwqzzt99>  D#WWQZZ $WWQZZ $    e**q. . 4rC   c                    	 |                                  }n# t          $ r | }Y nw xY wt          |t                    }t	          |          dk    rd S t	          |          dk    rt                              |d                   }|d= |rt                              |d                   }|d= |r|                    d          }t	          |          dk    rd }|                    d          }t	          |          dk    rd }t          d |                    d          ||                    d          |          S t	          |          dk    d S r   )	r   r   r   r   r   rY   context_header_new_linerZ   r   r   s          r   rH   rH     r   rC   c           	      2   	 |                                  }n# t          $ r | }Y nw xY wd}d}d}d}d}d}t                      }t          |t                    }	t          |	          D ]\  }
}t          |          sd}d}t          |          dk    rt                              |d                   }t                              |d                   }|d= |rt          |
                    d                    }t          |
                    d                    dk    r)t          |
                    d                    |z
  dz   }nd}t          |
                    d                    }t          |
                    d                    dk    r)t          |
                    d                    |z
  dz   }nd}n|r|
                    d          }|
                    d          }|dk    r:||k    s|dk    r.|                    t          ||z   d ||
                     |dz  }n?|dk    r9||k    s|dk    r-|                    t          d ||z   ||
                     |dz  }t          |          dk    t          |          dk    r|S d S )Nr   r   r0   rv      <>)r   r   listr   rP   	enumerater   rY   default_changerh   rZ   appendr
   )r   r#   oldnewold_lennew_lenrrl   r   hunkshunk_nrV   r(   r%   kindr`   s                   r   rQ   rQ     s   !!    C
CGG	A	AffG5"455E!%((    4yy 	$ii!m 	"((a11A$$T!W--AQ !''!**ooqwwqzz??Q&  !!''!**oo3a7GGG!''!**ooqwwqzz??Q&  !!''!**oo3a7GGGG 	wwqzzwwqzz3; AL AF NN6#'4v#F#FGGGFAAS[ a7l a1f NN6$av#F#FGGGFA5 $ii!m 	8 7||a 4rC   c           	         	 |                                  }n# t          $ r | }Y nw xY wd}d}d}d}t                      }t          |t                    }t          |          D ]t\  }}	d}d}t          |	          dk    rt                              |	d                   }
|	d= |
rt          |
	                    d                    }t          |
	                    d                    dk    r#t          |
	                    d                    }nd}t          |
	                    d                    }t          |
	                    d                    dk    r#t          |
	                    d                    }nd}d }
nt          |	          dk    t          |	          dk    r,t                              |	d                   }|r|	                    d          }|	                    d          }d }|dk    r:||k    s|dk    r.|                    t          ||z   d ||                     |dz  }n|dk    r:||k    s|dk    r.|                    t          d ||z   ||                     |dz  }nG|dk    rA||k    r1||k    r+|                    t          ||z   ||z   ||                     |dz  }|dz  }|	d= t          |	          dk    ,vt          |          dk    r|S d S )	Nr   r   r0   rw   rv   -+ )r   r   r   r   rL   r   r   rY   rh   rZ   unified_changer   r
   )r   r#   r   r   r   rl   r   r   r   rV   r(   r   r   r%   r   r`   s                   r   rM   rM   ?  s   !!    C
C	A	AffG5"455E!%(( * *$ii!m 	"((a11AQ !''!**ooqwwqzz??Q&  !!''!**ooGGG!''!**ooqwwqzz??Q&  !!''!**ooGGG# $ii!m 	& $ii!m 	$$T!W--A wwqzzwwqzz3; 
AL 
AF 
NN6#'4v#F#FGGGFAAS[ a7l a1f NN6$av#F#FGGGFAAS[ G| OW OvcAgsQwf'M'MNNNFAFAQ' $ii!m 	* 7||a 4rC   c           	         	 |                                  }n# t          $ r | }Y nw xY wd}d}d}d}t                      }t          |t                    }t          |          D ] \  }}	t          |	          sd}d}t          |	t                    }
t          |
          dk    rt          j	        d|          |
d         }|
d         }t          |          dk    rt                              |d                   }|d= |s9t          |                    d                    }t          |                    d                    dz   |z
  }t          |          dk    rqt                              |d                   }|d= |s9t          |                    d                    }t          |                    d                    dz   |z
  }	 	 t          |          dk    rHt          |          dk    r4d}t          |          dk    rt                              |d                   }|d= |s:|                    d          }|                    d          }|dk    r:||k    s|dk    r.|                    t!          ||z   d ||                     |dz  }nx|dk    rN||k    r||k    s|dk    s|dk    r6|                    t!          ||z   ||z   ||                     |dz  }|dz  }n$|dk    s|d	k    rt          j	        ||z   |          t          |          dk    t          |          dk    rHt          |          dk    r4d}t          |          dk    rt                              |d                   }|d= |s:|                    d          }|                    d          }|dk    r:||k    s|dk    r.|                    t!          d ||z   ||                     |dz  }nx|dk    rN||k    r||k    s|dk    s|dk    r6|                    t!          ||z   ||z   ||                     |dz  }|dz  }n$|dk    s|d	k    rt          j	        ||z   |          t          |          dk    't          |          dk    rt          |          dk    rt                              |d                   }t                              |d                   }d }d }|r*|                    d          }|                    d          }|r*|                    d          }|                    d          }|s	|s|d= |d= n|dk    rH|dk    rB||k    r<|                    t!          ||z   ||z   ||                     |dz  }|dz  }|d= |d= n|dk    s|d	k    r=||k    s|dk    r1|                    t!          ||z   d ||                     |dz  }|d= nL|dk    s|d	k    r=||k    s|dk    r1|                    t!          d ||z   ||                     |dz  }|d= n d S t          |          dk    rt          |          dk    t          |          dk    r|S d S )
Nr   r0   zContext diff invalidr   z'Got unexpected change in removal hunk: r   r   r   !)r   r   r   r   rN   r   r   context_hunk_newr   ParseExceptioncontext_hunk_oldrY   rh   rZ   context_changer   r
   )r   r#   r   r   jkr   r   r   rV   partsold_hunknew_hunkrc   r   rd   r   msgr%   r   r`   ocncokindnkindolinenlines                              r   rO   rO     sf   !!    C
C	A	AffG5"455E!%(( y y4yy 	t%566u::? 	L+,BFKKK88(mma 	 &&x{33A aggajj//C!''!**oo)C/Gh--!# 	$**8A;77QK !''!**ooaggajj//A-3 x==1 	X!!3 	;Ch--!# H"((!55QK wwqzzwwqzz3; 
HAL 
HAF 
HNN6#'4v#F#FGGGFAAS[ H'\H&'7lH89QHBCq&H NN6#'37D&#I#IJJJFAFAAS[ HDCK H$3C$JGGG) h--!# H, x==A 	#h--!"3 	;Ch--!# H"((!55QK wwqzzwwqzz3; 
HAL 
HAF 
HNN6$av#F#FGGGFAAS[ H'\H&'7lH89QHBCq&H NN6#'37D&#I#IJJJFAFAAS[ HDCK H$3C$JGGG) h--!# H*  (mma  	CMMA$5  	%%hqk22B%%hqk22BEE $ $ " QKQKK# %3, 5E> vcAgsQwvFFGGGQQQKQKK# 	# 	1< 	16 	vcAgtUFCCDDDQQKK# # 1< 16 vdC!GUFCCDDDQQKKttA (mma  	CMMA$5  	D 7||a 4rC   c           	         	 |                                  }n# t          $ r | }Y nw xY wd}d}d}d}d}t                      }t          |t                    }|                                 t          |          D ]L\  }	}
t          |
          sd}d}t          |
          dk    rt                              |
d                   }|
d= |s:t          |
                    d                    }t          |
                    d                    r"t          |
                    d                    n|}|
                    d          }|dk    rGd}||k    r=|                    t          ||z   d d |	                     |dz  }|dz  }|dz  }||k    =t          |
          dk    rt                              |
d                   }|s|dk    rd}||k    r=|                    t          ||z   d d |	                     |dz  }|dz  }|dz  }||k    =|                    t          d ||z
  |z   |z   |z   |
d         |	                     |dz  }|dz  }|s?|dk    r9|                    t          d ||z
  |z   dz   |
d         |	                     |dz  }|
d= t          |
          dk    t          |
          dk    Nt          |          dk    r|S d S )Nr   r   r0   rw   r)   r%   a)r   r   r   r   rR   reverser   r   rY   rh   rZ   r   r
   ed_hunk_end)r   r#   r   r   r   r   rl   r   r   r   rV   rc   old_end	hunk_kindes                  r   rS   rS     s0   !!    C	A	A	A	AffG5-00E	MMOOO!%(( , ,4yy 	$ii!m '	##DG,,AQ aggajj//C),QWWQZZAc!''!**ooocG

IC n !NN6#'4v#F#FGGGFAFAqLG	 n !
 d))a- %%d1g.. Y#- A!S. %vcAgtT6'J'JKKKQQ1	 "S. % NN6$a!a!0CT!Wf#V#VWWWFAFA Y#- NN6$a!aa&#R#RSSSFAG' d))a- ) $ii!m '	R 7||a 4rC   c           	      
   	 |                                  }n# t          $ r | }Y nw xY wd}d}d}d}t                      }t          |t                    }t          |          D ]\  }}	t          |	          rsd}t          |	          dk    r]t                              |	d                   }
|	d= |
s:|
                    d          }t          |
                    d                    }t          |
                    d                    }|dk    r{||dz   z  }||z  }|dk    rgt          |	          dk    rT|
                    t          d ||z   |	d         |                     |dz  }|dz  }|	d= |dk    rt          |	          dk    TnI|dk    rC||z  }|dk    r8|
                    t          ||z   d d |                     |dz  }|dz  }|dk    8t          |	          dk    ]t          |          dk    r|S d S )Nr   r   r0   rw   r   r)   )r   r   r   r   rT   r   r   rY   rZ   rh   r   r
   )r   r#   r   r   sizetotal_change_sizer   r   r   rV   rc   r   s               r   rU   rU   S  sR   !!    C	ADffG5"344E!%(( " "t99 	"Ad))a- "%++DG44G GGAJJ	!''!**oo1771::# ",q00C%-%( $s4yy1} $vdC!GT!Wf'M'MNNNQ	 G ( $s4yy1} $ #% "%-%( "vcAgtT6'J'JKKKQ	 ( "/ d))a- "8 7||a 4rC   )@recollectionsr   snippetsr   r    r   r   r"   r
   file_timestamp_strcompiler   r   r   rF   rL   r   r   r   rN   r   r   r   rR   r   rT   rP   default_hunk_midr   r=   r   r[   rJ   git_header_file_moder\   bzr_header_indexbzr_header_old_linebzr_header_new_liner;   rg   ri   rx   r   ry   rz   r9   r*   r    r,   r-   r!   r8   r<   r:   rI   rG   rH   rQ   rM   rO   rS   rU    r   r   <module>r      s   
			 " " " " " " 3 3 3 3 3 3 3 3      	HT	V	V
*V2
3
3	H1	2	2,  011!rz/22 $"*X0B%BS%HII $"*[3E%E%KLL RZ KLL O,,$"*[3E%E%KLL $"*W/A%AC%GHH RZ CDD 2:?@@ 2:899 -..
344bjBJ677 RZ DEE 2:g&& O,,
  RZ <== 2:HII  bj..  bj!122 !rz"DEE #$HII 2:j)) - - ' )rz*PQQ !rz.11 ' ;<<!rz"344 'RZ(:;; #$BCC > > >@  ( ( (V  0! ! !(I I IXD D DNQ Q Qh  0! ! !H! ! !H5 5 5p= = =@L L L^B B BJ1 1 1 1 1r   