
    gh!                     h    d dl Z d dlZd dlZd dlmZ d dl d dlmZ  G d dej                        Zy)    N)Repo)*)cmf_evagit_discussionc                   b    e Zd Zej                  j
                  dgz   Zed        Zd Zd Z	d Z
y)CmfEvagitDiscussionplace_discussionc           	         t         j                  j                  |      }t         j                  j                  |g d      }|j                  |j
                  |j                  ||d t        |      d}t         j                         }	||	_	        t        j                  |j                               j                          d| |	_        ||	_        ||	_        |	j#                          |	S )N)id)base_sha
source_sha
target_sha)r
   fields)r   	start_shahead_shaold_pathnew_pathold_linenew_line_0_)modelsCmfEvagitMergeRequestgetCmfEvagitMergeRequestDiffr   r   r   intr   parenthashlibsha1encode	hexdigest	line_codeoriginal_positionpositionsave)
clsmr_iddiff_idfilename	line_textline_nummrdiffposition_data
discussions
             0./modules/evagit/models/cmf_evagit_discussion.pyr   z$CmfEvagitDiscussion.place_discussion   s    ))---7//33wGo3p   H
 //1

"),,y/?/?/A"B"L"L"N!OsS[R\]
'4
$+
    c                    | j                  g d       | j                  j                  j                  j                  }t	        |j
                        }t        j                         5 }|j                  |      }|j                         5 }|j                  ddd       |j                  ddd       d d d        |j                  j                  | j                  j                  j                         t        | d| j                  d	    d
      5 }|j!                         }d d d        | j                  d   s
	 d d d        y | j#                         }| j                  d   t%              k  r"|| j                  d   dz
     |k(  r
	 d d d        y | j                  d   | j'                  ||      c| j                  d<   | j                  d<   | j                  d   rkt)        j*                  || j                  d   dz
     j-                               j/                          d| j                  d    d| j                  d    | _        | j3                          d d d        y # 1 sw Y   xY w# 1 sw Y   LxY w# 1 sw Y   y xY w)N)z parent.branch_from.commit.parentzparent.branch_from.namer"   r!   r    )r   usernameu   Системаemailzsystem@example.com/r   rr      r   _)load_fieldsr   branch_fromcommitr   pathtempfileTemporaryDirectorycloneconfig_writer	set_valuegitcheckoutr2   openr"   	readlinesget_original_linelenfind_new_liner   r   r   r   r    r#   )	selfbd_repofs_repotmp_dircloned_repor?   filelinesoriginal_lines	            r.   recalc_positionz#CmfEvagitDiscussion.recalc_position%   s    ! 	
 ++))0077w||$((* 	g!--0K**, O''8HI''9MNO OO$$T[[%<%<%A%AB	4==#<"=>D )() ==,	 	 !224M}}Z(CJ65zAZ]^A^;_cp;p%	 	( DH==Q[C\^b^p^pq~  AF  _G@DMM*%t}}Z'@}}Z($+LLt}}Z7PST7T1U1\1\1^$_$i$i$k#llmnrn{n{  }G  oH  nI  IJ  KO  KX  KX  Yc  Kd  Je  "fIIK/	 	O O) )	 	sK   ("I8
'I1AI8I+!I8AI8CI8I(	#I8+I5	0I88Jc                     | j                   j                  j                  j                   }|j                  | j                  d   | j                  d         }|d   j                         }|| j                  d      S )Nr   r   contentr   )r   r9   r:   fetch_file_contentr!   
splitlines)rH   rI   datarN   s       r.   rE   z%CmfEvagitDiscussion.get_original_lineG   sn    ++))0077))$*@*@*LdNdNdeoNpqY**,T++J788r/   c                     d\  }}d\  }}t        t        |            D ]M  }||   |k(  r|dz   } n>t        j                  d ||   |      j	                         }||kD  sA||k\  sG|}|dz   }O |xs |S )N)NN)g333333?r   r6   c                     | dk(  S )N  )xs    r.   <lambda>z3CmfEvagitDiscussion.find_new_line.<locals>.<lambda>X   s
    18 r/   )rangerF   difflibSequenceMatcherratio)	rH   rO   rN   full_match_line_numpart_match_line_num	thresholdmax_similarityi
similaritys	            r.   rG   z!CmfEvagitDiscussion.find_new_lineO   s    3=00$*!	>s5z" 	,AQx=(&'!e# 001CU1X}]cceJN*zY/F!+&'!e#	, #9&99r/   N)__name__
__module____qualname__r   r   api_methodsclassmethodr   rP   rE   rG   rY   r/   r.   r   r   
   s>    ';;GGK]J^^K . D9:r/   r   )	r   r<   r]   rA   r   cmf.includemodules.evagit.fieldsr   r   rY   r/   r.   <module>rm      s,         7S:/CC S:r/   