U
    k]                     @   s.   d dl Z d dlZG dd deZdddZdS )    Nc                   @   s   e Zd ZdZdS )
PatchErrorz  Error during the patch process N)__name__
__module____qualname____doc__ r   r   @/usr/lib/python3/dist-packages/DistUpgrade/DistUpgradePatcher.pyr      s   r   c              	   C   s  t d\}}t| dd}| }W 5 Q R X d }}|}	t|dd}| }
W 5 Q R X |
D ]J}|	|kr|| }|dr|dd }|dd\}}|rtd	|d\}}}tj	|||| dd
\}}|||< q\|d }|dd d\}}}t
|}|d8 }|dkr|d }nt
|}|dkrH|||= |}	|d8 }n2|dkrX|}	n"|dkrn|||= ntd| q\|	|kr\|dkr|}	q\|d7 }||| q\d|}|rt }||d | |krtdt| ddd}|| W 5 Q R X dS )z python implementation of enough "ed" to apply ed-style
        patches. Note that this patches in memory so its *not*
        suitable for big files
       zUTF-8)encodingr   zs/N/   zflags for s// not supported yet)count, cadzunknown command: '%s'z.
z(the md5sum after patching is not correctwT)rangeopen	readlinesstrip
startswithrsplitr   	partitionresubnintinsertjoinhashlibmd5updateencodeZ	hexdigestwrite)ZorigZedpatchZresult_md5sumZSTATE_EXPECT_COMMANDZSTATE_EXPECT_DATAfZ
orig_linesstartendstatelineslineZsubsflagsZregexpsepreplnewr   ZcommandZ	start_strZend_strresultr"   r   r   r   patch   sf    











r1   )N)r!   r   	Exceptionr   r1   r   r   r   r   <module>   s   