
    _h                      `    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_merge_requestc                        e Zd Zej                  j
                  g dz   Z fdZ fdZ fdZd Z	d Z
d Zd Zd	 Z xZS )
CmfEvagitMergeRequest)closefetch_conflictsmergec                 .    g d}t         |          |z   S )Nbranch_from.commit.parentbranch_from.namebranch_to.namezbranch_from.commit.shazbranch_to.commit.shaworkflowzbranch_from.parentzbranch_to.parent)supersave_preload_fields)selffields	__class__s     3./modules/evagit/models/cmf_evagit_merge_request.pyr   z)CmfEvagitMergeRequest.save_preload_fields   s    
 w*,v55    c           
      >   | j                   r_t        j                  j                  d| j                  j
                         t        j                  j                  d| j                  j
                         t        j                  j                  ddd| j                  gdd| j                  gg dgg      }|rt        d|j                   d	d
       | j                  j                  j
                  }t        |j                        }|j                  | j                  j                  | j                  j                        }|j                  j!                  | j                  j                  | j                  j                        }g }|D ]u  }	t        j"                  j                  ||	d         }
|
s<t        j#                  ||	d   |	d   |	d   |	d   |	d         }
 |
j$                  |i | |j'                  |
       w || _        t        j+                  | | j                  j                  j,                  | j                  j                  j,                  |      j%                         }| j                   st| j.                  rht        j                  j                  d| j                  j
                         t        j                  j                  d| j                  j
                         | j0                  j.                  r| j2                  dk(  r}t        j                  j                  d| j                  j
                         t        j                  j                  d| j                  j
                         t4        j6                  | _        t;        | H  |i |S )Nperm_create_merge_requestANDbranch_from=	branch_to)zstatus.coder   open)filterzPull request u3    уже создан для данных ветокTabort
commit_sha)parentshacommit_summarycommit_messagecommit_author	commit_at)r#   nametextr'   r$   commited_dater#   
source_sha
target_shabase_shaperm_edit_merge_requestCLOSEDperm_close_merge_request)is_newmodelsCmfEvagitRolecheck_role_permissionr   r#   r   r   get	cmf_alertr)   commitr   pathfetch_unmerged_commitsgit
merge_baseCmfEvagitCommitsaveappendcommitsCmfEvagitMergeRequestDiffr$   
is_changedstatuscache_status_typegcurrent_user	closed_byr   )r   argskwargsmrbd_repofs_repounmerged_commitsr/   
db_commitsr9   	db_commitmr_diffr   s               r   r?   zCmfEvagitMergeRequest.save   s   ;;  667RTXTdTdTkTkl  667RTXTbTbTiTij--11"C)9)9: #t~~60:1 B M"''2efnrs&&--44G7<<(G&==d>N>N>S>SUYUcUcUhUhi{{--dnn.A.A4CSCSCXCXYHJ* -"2266g6R^K_6`	  & 6 6&#$45#$45&,_&="<0&,[&9 !7 !I #INND3F3!!),- &DL66++2266>>0044!	 7 
 df  {{t  667PRVRbRbRiRij  667PRVR`R`RgRgh;;!!d&<&<&H  667QSWScScSjSjk  667QSWSaSaShShi^^DNw|T,V,,r   c                 *    t         |          ddgz   S )NrH   rD   )r   project_perm_allow_fields)r   r   s    r   rS   z/CmfEvagitMergeRequest.project_perm_allow_fieldsP   s    w02k85LLLr   c                 j    | j                   r't        j                  j                  dd      | _        y y )Napp_gitT)sys_typesystem)r3   r4   	CmfFolderr7   r#   r   s    r   _calc_parentz"CmfEvagitMergeRequest._calc_parentS   s+    ;; **..	$.ODK r   c                 n    | j                   s)t        j                  j                  dddg      | _         y y )Nzmerge_request.base:defaultTsave_eval_code)codecache_inmemoryr   )r   r4   CmfWorkflowr7   rY   s    r   _calc_workflowz$CmfEvagitMergeRequest._calc_workflowW   s>    }}"..228Tei  tD  sE2  FDM r   c                    | j                  g d       | j                  j                  j                  }t	        |j
                        }g }t        j                         5 }|j                  |      }|j                         5 }|j                  ddd       |j                  ddd       d d d        	 |j                  j                  | j                  j                         |j                  j                  d| j                  j                   d	d	
       d d d        |S # 1 sw Y   xxY w# t         $ r |j"                  j%                         }|j'                         D ]t  \  }}	|g d}
|	D ]T  \  }}dddd}g g g d}|j(                  j+                         j-                  d      |||   <   |
d   j/                  |       V |j/                  |
       v Y w xY w# 1 sw Y   |S xY w)N)r   r   r   r   userr)   tmpemailztmp@example.comorigin/T)	no_commitno_ff)r)   	conflictsbasetargetsource)         )rj   rk   rl   zutf-8ri   )load_fieldsr   r9   r#   r   r:   tempfileTemporaryDirectorycloneconfig_writer	set_valuer<   checkoutr   r)   r
   	Exceptionindexunmerged_blobsitemsdata_streamreaddecoder@   )r   rL   rM   restmp_dircloned_report   ri   	file_pathblobsdataiblob_mapconflict_datas                  r   r	   z%CmfEvagitMergeRequest.fetch_conflicts[   s    cd""))00w||$((* 	%g!--0K**, L''>''9JKL%(()<)<=%%0@0@0E0E/F&GSW_c%d	%. 
)L L  %'--<<>	(1(9 %$Iu$-B?D#( @4#)h8D13rR(P151A1A1F1F1H1O1OPW1Xd1g.[)00?	@ JJt$%%	%. 
sD    "G'D )G2A$D, D)	%G,B*GGGGG&c           	         | j                  g d       t        j                  j                  d| j                  j
                         t        j                  j                  d| j                  j
                         | j                         }|rt        dd       | j                  j                  j
                  }t        |j                        }| j                  j                  |j                  vr%t        d| j                  j                   dd       | j                  j                  |j                  vr%t        d| j                  j                   dd       t        j                         5 }|j!                  |      }|j#                         5 }|j%                  d	d
d       |j%                  d	dd       d d d        |j&                  j)                  | j                  j                         |j&                  j+                  d| j                  j                   d| j                  j                   d| j                  j                   d       |j-                         j/                          d d d        | j0                  j3                  d      | _        | j7                          t9        t        j:                  j<                  |j>                  g       | S # 1 sw Y   %xY w# 1 sw Y   yxY w)Nr   rb   perm_merge_merge_requestu6   Обнаружены конфликты слиянияTr    u0   Слияние невозможно. Ветка u    не найденаrc   r)   u   Системаre   zsystem@example.comrf   zMerge branch 'z' into '')mmerged)status_code)rI   ) rp   r4   r5   r6   r   r#   r   r	   r8   r9   r   r:   r)   branchesrq   rr   rs   rt   ru   r<   rv   r
   remotepushr   get_default_statusrD   r?   schedule_deferred_jobCmfEvagitRepo	sync_repoid)r   ri   rL   rM   r   r   rt   s          r   r
   zCmfEvagitMergeRequest.merge{   sn    ! 	 	223MtO_O_OfOfg223Mt~~OdOde((*	NVZ[""))00w||$  (8(88HIYIYI^I^H__st  }A  B>>g&6&66HI\I\H]]qrz~((* 	(g!--0K**, O''8HI''9MNO OO$$T^^%8%89OO!!$**//01"4#3#3#8#8"9$..BUBUAVVWX "   %%'	( mm6686L		f22<<GJJ>RO O	( 	(s%   3"K,'K<B8K,K)	$K,,K5c                    | j                  g d       | j                  j                  j                  }t	        |j
                        }|j                  j                  | j                  j                  | j                  j                        }t        j                  j                  | | j                  j                  j                  | j                  j                  j                  |      }|sct        j                  | | j                  j                  j                  | j                  j                  j                  |      j                         }t        j                  j!                  |       }|D ]  }|j#                           y )Nr   rb   r,   )r#   )rp   r   r9   r#   r   r:   r<   r=   r   r)   r4   rB   r7   r$   r?   CmfEvagitDiscussionlistrecalc_position)r   rL   rM   r/   rQ   discussions
discussions          r   synczCmfEvagitMergeRequest.sync   s>    ! 	 ""))00w||$;;))$..*=*=t?O?O?T?TU2266''..22~~,,00	 7  66++2266>>0044!	 7 
 df  0055T5B% 	)J&&(	)r   )__name__
__module____qualname__r   r   api_methodsr   r?   rS   rZ   r`   r	   r
   r   __classcell__)r   s   @r   r   r   
   sM    *@@LL P
 
K67-rMPF@)V)r   r   )rq   datetimer<   r   cmf.includemodules.evagit.fieldsr   r    r   r   <module>r      s)        :x)4JJ x)r   