U
    #h                     @   sF   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_merge_requestc                       sN   e Zd Zejjdddg Z fddZdd Zdd	 Zd
d Z	dd Z
  ZS )CmfEvagitMergeRequestclosefetch_conflictsmergec           	   	      s  | j dddddgd | jrtjd| jj tjd| jj tjj	dd	d
| jgdd
| jgdd
dgggd}|rt
d|j ddd | jjj}|| jj| jj}g }|D ]^}tjj	||d d}|stj||d |d |d |d |d d}|j|| || q|| _| jsJ| jrJtjd| jj tjd| jj | jjr| jdkrtjd| jj tjd| jj tj| _t j||S )Nbranch_from.parentbranch_to.parentbranch_from.commit.parentbranch_from.namebranch_to.nameZfieldsZperm_create_merge_requestZANDbranch_from=	branch_tozstatus.codeopen)filterzPull request u3    уже создан для данных ветокTabortZ
commit_sha)parentshaZcommit_summaryZcommit_messagecommit_authorZ	commit_at)r   nametextr   r   Zcommited_dateZperm_edit_merge_requestZCLOSEDZperm_close_merge_request)load_fieldsis_newmodelsCmfEvagitRolecheck_role_permissionr   r   r   r   get	cmf_alertr   commitZfetch_unmerged_commitsZCmfEvagitCommitsaveappendZcommitsZ
is_changedstatusZcache_status_typegZcurrent_userZ	closed_bysuper)	selfargskwargsmrZrepoZunmerged_commitsZ
db_commitsr"   Z	db_commit	__class__ 3./modules/evagit/models/cmf_evagit_merge_request.pyr#      sX       


zCmfEvagitMergeRequest.savec                 C   s   | j rtjjddd| _d S )NZapp_gitT)Zsys_typesystem)r   r   Z	CmfFolderr    r   r(   r.   r.   r/   _calc_parentC   s    z"CmfEvagitMergeRequest._calc_parentc                 C   s   | j stjjdd| _ d S )Nzmerge_request.base:default)code)workflowr   ZCmfWorkflowr    r1   r.   r.   r/   _calc_workflowG   s    z$CmfEvagitMergeRequest._calc_workflowc              
   C   sB  | j dddgd | jjj}t|j}g }t }||}|	 "}|
ddd |
ddd	 W 5 Q R X z0|j| jj |jjd
| jj ddd W n tk
r2   |j }| D ]h\}}	|g d}
|	D ]F\}}dddd}g g g d}|j d||| < |
d | q||
 qY nX W 5 Q R X |S )Nr   r   r   r   userr   Ztmpemailztmp@example.comorigin/T)Z	no_commitZno_ff)r   	conflictsbasetargetsource)         )r:   r;   r<   zutf-8r9   )r   r   r"   r   r   pathtempfileTemporaryDirectorycloneconfig_writer	set_valuegitcheckoutr   r   r   	ExceptionindexZunmerged_blobsitemsZdata_streamreaddecoder$   )r(   bd_repofs_reporestmp_dircloned_reporD   r9   Z	file_pathZblobsdataiZblob_mapZconflict_datar.   r.   r/   r   K   s.    



 

z%CmfEvagitMergeRequest.fetch_conflictsc              
   C   sv  | j ddddddddgd	 tjd
| jj tjd
| jj |  }|rXtddd | jj	j}t
|j}| jj|jkrtd| jj ddd | jj|jkrtd| jj ddd t }||}| "}|ddd |ddd W 5 Q R X |j| jj |jjd| jj d| jj d| jj dd |   W 5 Q R X | jjdd| _|   |  | S )Nr   r   r   zbranch_from.commit.shazbranch_to.commit.shar4   r	   r
   r   Zperm_merge_merge_requestu6   Обнаружены конфликты слиянияTr   u0   Слияние невозможно. Ветка u    не найденаr6   r   u   Системаr7   zsystem@example.comr8   zMerge branch 'z' into '')mZmerged)Zstatus_code)r   r   r   r   r   r   r   r   r!   r"   r   r@   r   ZbranchesrA   rB   rC   rD   rE   rF   rG   r   Zremotepushr4   Zget_default_statusr%   r#   sync)r(   r9   rM   rN   rP   rQ   rD   r.   r.   r/   r   k   sH         




zCmfEvagitMergeRequest.merge)__name__
__module____qualname__r   r   Zapi_methodsr#   r2   r5   r   r   __classcell__r.   r.   r,   r/   r   
   s     4 r   )rA   ZdatetimerF   r   Zcmf.includeZmodules.evagit.fieldsr   r   r.   r.   r.   r/   <module>   s
   