U
    Knhg                     @   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                       sb   e Zd Zejjdddg Z fddZ fddZdd	 Zd
d Z	dd Z
dd Zdd Z  ZS )CmfEvagitMergeRequestclosefetch_conflictsmergec                    s"   ddddddddg}t   | S )	Nbranch_from.commit.parentbranch_from.namebranch_to.namebranch_from.commit.shabranch_to.commit.shaworkflowbranch_from.parentbranch_to.parent)supersave_preload_fields)selffields	__class__ 3./modules/evagit/models/cmf_evagit_merge_request.pyr      s         z)CmfEvagitMergeRequest.save_preload_fieldsc              	      s  | j rBt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}|rtt	d	|j
 d
dd | jjj}t|j}|| jj
| 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|| _tj| | jjj| jjj|d }| j sv| jrvt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 )NZ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_dater    Z
source_shaZ
target_shabase_shaZperm_edit_merge_requestZCLOSEDZperm_close_merge_request)is_newmodelsCmfEvagitRolecheck_role_permissionr   r    r   r   get	cmf_alertr#   commitr   pathZfetch_unmerged_commitsgit
merge_baseZCmfEvagitCommitsaveappendZcommitsCmfEvagitMergeRequestDiffr!   Z
is_changedstatusZcache_status_typegZcurrent_userZ	closed_byr   )r   argskwargsmrbd_repofs_repoZunmerged_commitsr&   Z
db_commitsr-   Z	db_commitmr_diffr   r   r   r1      sZ    




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_parentP   s    z"CmfEvagitMergeRequest._calc_parentc                 C   s   | j stjjdd| _ d S )Nzmerge_request.base:default)code)r   r(   ZCmfWorkflowr+   r=   r   r   r   _calc_workflowT   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)         )rF   rG   rH   zutf-8rE   )load_fieldsr   r-   r    r   r.   tempfileTemporaryDirectorycloneconfig_writer	set_valuer/   checkoutr   r#   r   	ExceptionindexZunmerged_blobsitemsZdata_streamreaddecoder2   )r   r9   r:   restmp_dircloned_reporP   rE   Z	file_pathZblobsdataiZblob_mapZconflict_datar   r   r   r   X   s.    



 

z%CmfEvagitMergeRequest.fetch_conflictsc              
   C   s  | 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| _|   ttjj|jgd | S )Nr	   r
   r   r   r   r   r   r   rA   Zperm_merge_merge_requestu6   Обнаружены конфликты слиянияTr   u0   Слияние невозможно. Ветка u    не найденаrB   r#   u   СистемаrC   zsystem@example.comrD   zMerge branch 'z' into '')mZmerged)Zstatus_code)r6   ) rL   r(   r)   r*   r   r    r   r   r,   r-   r   r.   r#   ZbranchesrM   rN   rO   rP   rQ   r/   rR   r   Zremotepushr   Zget_default_statusr4   r1   Zschedule_deferred_jobZCmfEvagitRepoZ	sync_repoid)r   rE   r9   r:   rY   rZ   rP   r   r   r   r   x   sH         




zCmfEvagitMergeRequest.mergec              	   C   s   | j ddddddddgd	 | jjj}t|j}|j| jj	| jj	}t
jj| | jjj| jjj|d
}|st
j| | jjj| jjj|d
 }t
jj| d}|D ]}|  qd S )Nr	   r
   r   r   r   r   r   r   rA   r%   )r    )rL   r   r-   r    r   r.   r/   r0   r   r#   r(   r3   r+   r!   r1   ZCmfEvagitDiscussionlistZrecalc_position)r   r9   r:   r&   r;   ZdiscussionsZ
discussionr   r   r   sync   s:         


zCmfEvagitMergeRequest.sync)__name__
__module____qualname__r   r   Zapi_methodsr   r1   r>   r@   r   r   rc   __classcell__r   r   r   r   r   
   s     9 +r   )rM   Zdatetimer/   r   Zcmf.includeZmodules.evagit.fieldsr   r   r   r   r   r   <module>   s
   