
    q&f              
          d dl Z d dlZd dlmZmZ e j
                  Z G d de      Zdeee	e	f      deee	e	f      de	ddfd	Z
d
ede	de	de	ddf
dZd
ede	deee	e	f      dee	e	f   fdZdedee   defdZde	dede	fdZy)    N)ListTuplec                       e Zd ZdZy)mpatchErrorz+error raised when a delta cannot be decodedN)__name__
__module____qualname____doc__     7/usr/lib/python3/dist-packages/mercurial/pure/mpatch.pyr   r      s    5r   r   dstsrclreturnc                     |rk|j                         }|d   |kD  r6|j                  |d   |z
  |d   |z   f       | j                  ||d   f       y | j                  |       ||d   z  }|rjy y )Nr      )popappend)r   r   r   fs       r   _pullr   $   sr     GGIQ4!8JJ!q!A$(+,JJ1Q4y!

1	QqT	 r   mdestcountc                     | j                  |       | j                  |      }| j                  |       | j                  |       y)zXmove count bytes from src to dest

    The file pointer is left at the end of dest.
    N)seekreadwrite)r   r   r   r   bufs        r   _mover    1   s2    
 FF3K
&&-CFF4LGGCLr   r   listc                 `    |}t        |      D ]  \  }}t        | |||       ||z  } ||z
  |fS )N)reversedr    )r   r   r!   startr   ps         r   _collectr&   <   sH     E 1aaq %Kr   abinsc                    |s| S |D cg c]  }t        |       }}t        |      }t        |       |z   }||z   |z   }d|}}|s| S t               }	|	j                  |        t        |       |fg}
||z   }|	j	                  |       |D ]  }|	j                  |        |D ]  }t        |
      dkD  r||}}t        |	||
      g}
g }||z   }d}||k  r|	j	                  |       	 t        j                  d|	j                  d            \  }}}t        ||
||z
         t        g |
||z
         |j                  ||dz   f       ||dz   z  }|}||k  r|
j                  t        |              t        |	||
      }|	j	                  |d          |	j                  |d         S c c}w # t        j                  $ r t        d      w xY w)Nr         >lll      patch cannot be decodedr   )lensumstringior   r   r&   structunpackr   errorr   r   r   extendr#   )r'   r(   xplensplbltlb1b2r   fragsposr%   plennewendlastp1p2r   ts                        r   patchesrE   F   s   !"SV"E"	UB	Q"B	b2BB
A GGAJ!fb\NE r'CFF3K 	
  $u:BaU+,EDjCiFF3K>"MM'166":>	B #ub4i("eR"W%JJ38}%1r6MCD Ci 	Xc]#)$, 	BAFF1Q4L66!A$<] #D << >!"<==>s   F"")F''Gorigdeltac                     d\  }}}t        |      }d}||k  rG|||dz    }t        j                  d|      \  }}	}
||	kD  rn||
z   }|dz   }|||z
  z  }|	}||
z  }||k  rG||k7  rt        d      || |z
  z  }|S )N)r   r   r   r,   r+   r-   )r.   r1   r2   r   )rF   rG   outlenrA   binbinenddatadecoder$   r@   lengths              r   patchedsizerO   {   s    FD#ZFD
&.sS2X&#]]7F;sF3;VmRx%$,& &. f}455
dTkFMr   )ior1   typingr   r   BytesIOr0   	Exceptionr   intr   r    r&   bytesrE   rO   r   r   r   <module>rV      s   
  ::6) 6
	eCHo	
%)%S/%:
?B
	
X S s 3 4    !%eCHo!6 
38_ 2u 2DK 2E 2jc % C r   