
    1j                    b    U d Z ddlmZ ddlZddlmZ dZded<   dZd	ed
<   ddZ		 	 	 	 	 	 ddZ
y)uO   main 브랜치 충돌 가능성을 사전 점검하는 4-step preflight 헬퍼.    )annotationsN)Optional)SAFELIKELY_CONFLICTABORT_FETCH_RETRYtupleVALID_DECISIONS   int_TIMEOUT_SECc                >    t        j                  | |ddt              S )u4   지정한 worktree에서 git 명령을 실행한다.T)cwdcapture_outputtexttimeout)
subprocessrunr   )argsr   s     N/home/jay/workspace/.worktrees/task-2691-dev8/utils/main_conflict_preflight.py_run_gitr      s"    >>     c                n   ddg g dd}	 t        g d|       }|j
                  d
k7  r4d|j
                   d|j                  j                         dd  |d<   d	|fS d|d<   d}	 t        g d|       }|j
                  d
k(  r=|j                  j                         r#|j                  j                         d
   }||d<   nd|j
                   |d<   	 t        g d|       }|j
                  d
k7  r|d   xs d|j
                   |d<   g }	 t        g d|       }	|	j
                  d
k(  rF|	j                  j                         D 
cg c]"  }
|
j                         r|
j                         $ }}
n|d   xs d|	j
                   |d<   ||d<   t        |      }t        t        |      |z        }||d<   |rd| |d<   d|fS |d   sd|d<   d|fS # t        j                  t        t        f$ r}d||d<   d	|fcY d}~S d}~ww xY w# t        j                  t        t        f$ r}d||d<   Y d}~cd}~ww xY w# t        j                  t        t        f$ r}|d   xs d||d<   Y d}~fd}~ww xY wc c}
w # t        j                  t        t        f$ r}|d   xs d||d<   Y d}~&d}~ww xY w) uP   worktree와 origin/main 사이의 충돌 가능성을 4-step으로 점검한다.FN )fetch_ok
remote_sha
diff_filesconflict_filesdecision_reason)gitfetchoriginmainz--prune)r   zstep1 fetch raised: r   r   r   zstep1 fetch failed rc=z stderr=   Tr   )r   z	ls-remoter!   r"   r   zstep2 ls-remote failed rc=zstep2 ls-remote raised: )r   z	rev-parseorigin/mainzstep3 rev-parse failed rc=zstep3 rev-parse raised: )r   diffr$   z--name-onlyzstep4 diff failed rc=zstep4 diff raised: r   r   z"intersection with expected_files: r   z5no intersection between diff_files and expected_filesr   )r   r   TimeoutExpiredFileNotFoundErrorOSError
returncodestderrstripstdoutsplit
splitlinessetsorted)worktree_pathexpected_filesevidence
fetch_procexcr   ls_remote_procrev_parse_procr   	diff_proclineexpected_setr   s                r   check_conflict_likelihoodr;      sn    H-9

 !$Z%:%:$; < ''--/568 	"# #H,,HZ !%JI!2
 $$)n.C.C.I.I.K'..446q9J%/H\" -^-F-F,GH &'
!/
 $$)*+ L/0I0I/JK &' J
9
	 1$ &,,779::< 

J  *+ B*9+?+?*@A &' (H\~&LC
Ol:;N!/H00@A 	"# !(**%&C 	"# 8k %%'8'B -(<SG&D"#"H,,-6 %%'8'B I(@&H"#I %%'8'B 
&'M-EcW+M 	"#
 %%'8'B 
&'H-@+H 	"#
sx   G $A-H 7H< :I< 'I7-I< H/H :H HH9&H44H9<I4I//I47I< <J4J//J4)r   	list[str]r   strreturnzsubprocess.CompletedProcess)r1   r=   r2   r<   r>   ztuple[str, dict])__doc__
__future__r   r   typingr   r	   __annotations__r   r   r;    r   r   <module>rD      sM    U "  I Ic hhh hr   