U
    gh!                     @   sN   d dl Z d dlZd dlZd dlmZ d dlT d dlmZ G dd dejZdS )    N)Repo)*)cmf_evagit_discussionc                   @   s>   e Zd Zejjdg Zedd Zdd Zdd Z	dd	 Z
d
S )CmfEvagitDiscussionplace_discussionc           
      C   s   t jj|d}t jj|dddgd}|j|j|j||d t|d}t  }	||	_	t
|   d| |	_||	_||	_|	  |	S )N)idbase_sha
source_sha
target_sha)r   fields)r   Z	start_shahead_shaZold_pathnew_pathold_linenew_lineZ_0_)ZmodelsZCmfEvagitMergeRequestgetZCmfEvagitMergeRequestDiffr   r
   r	   intr   parenthashlibsha1encode	hexdigest	line_codeoriginal_positionpositionsave)
clsZmr_idZdiff_idfilenameZ	line_textZline_nummrZdiffZposition_dataZ
discussion r   0./modules/evagit/models/cmf_evagit_discussion.pyr      s"    
z$CmfEvagitDiscussion.place_discussionc           	   
   C   s  | j dddddgd | jjjj}t|j}t P}||}|	 "}|
ddd	 |
dd
d W 5 Q R X |j| jjj t| d| jd  d}| }W 5 Q R X | jd sW 5 Q R  d S |  }| jd t|kr|| jd d  |krW 5 Q R  d S | jd | || | jd< | jd< | jd rzt|| jd d     d| jd  d| jd  | _|   W 5 Q R X d S )Nz parent.branch_from.commit.parentzparent.branch_from.namer   r   r   )r   usernameu   СистемаZemailzsystem@example.com/r   rr      r   _)Zload_fieldsr   branch_fromcommitr   pathtempfileZTemporaryDirectoryZcloneconfig_writerZ	set_valuegitZcheckoutr!   openr   	readlinesget_original_linelenfind_new_liner   r   r   r   r   r   )	selfbd_repoZfs_repoZtmp_dirZcloned_repor*   filelinesoriginal_liner   r   r   recalc_position%   s4       



,$>z#CmfEvagitDiscussion.recalc_positionc                 C   s>   | j jjj }|| jd | jd }|d  }|| jd  S )Nr   r   Zcontentr   )r   r&   r'   Zfetch_file_contentr   
splitlines)r1   r2   datar4   r   r   r   r.   G   s    z%CmfEvagitDiscussion.get_original_linec           	      C   sx   d\}}d\}}t t|D ]R}|| |kr8|d } qptdd || | }||kr||kr|}|d }q|pv|S )N)NN)g333333?r   r$   c                 S   s   | dkS )N r   )xr   r   r   <lambda>X       z3CmfEvagitDiscussion.find_new_line.<locals>.<lambda>)ranger/   difflibZSequenceMatcherZratio)	r1   r5   r4   Zfull_match_line_numZpart_match_line_numZ	thresholdZmax_similarityiZ
similarityr   r   r   r0   O   s    
z!CmfEvagitDiscussion.find_new_lineN)__name__
__module____qualname__r   r   Zapi_methodsclassmethodr   r6   r.   r0   r   r   r   r   r   
   s   
"r   )	r   r)   r>   r+   r   Zcmf.includeZmodules.evagit.fieldsr   r   r   r   r   r   <module>   s   