
    iF              
          d Z ddlZddlZddlZddlZddlZddlmZmZmZ ddl	m
Z
  e ed            Z e
ej                  j                  dd            Zed	z  d
z  dz  Z ej                   ej"                  d        ej$                  d      ZdeddfdZdedede
dedef
dZedk(  r ej2                         Zej7                  dd       ej7                  dd       ej7                  d ee             ej7                  dd       ej9                         Z eej<                  ej>                   e
ej@                        ejB                        Z" e# ejH                  e"d d!"             yy)#u  
auto_revert.py - probe FAIL 시 자동 revert PR 생성 (task-2367 P1)

사용법:
    python3 scripts/auto_revert.py --task-id task-XXXX --merge-sha <sha> --project-path <path> --reason "..."

동작:
    1. revert/{task_id} 브랜치 생성 (main 기반)
    2. git revert -m 1 <merge_sha> (★ hard reset 절대 사용 금지)
    3. push + gh pr create
    4. audit log에 reverted 기록
    5. 회장에게 즉시 Telegram 알림 (gh CLI 또는 cokacdir 사용)
    N)datetimetimezone	timedelta)Path	   )hoursWORKSPACE_ROOTz/home/jay/workspacememoryauditzauto-merge.logz'%(asctime)s [%(levelname)s] %(message)s)levelformatauto_revertrecordreturnc                    dd l }t        j                  j                  dd       t        j	                  d       t        t        dd      5 }t        d |D              d	z   }d d d        | j                  d
t        j                  t              j                                | d<   t        t        dd      5 }|j                  |j                         |j                         	 |j                  t!        j"                  | d      dz          |j                  |j                         |j$                         	 d d d        y # 1 sw Y   xY w# |j                  |j                         |j$                         w xY w# 1 sw Y   y xY w)Nr   T)parentsexist_ok)r   rzutf-8)encodingc              3       K   | ]  }d   yw)   N ).0_s     D/home/jay/workspace/.worktrees/task-2461-dev6/scripts/auto_revert.py	<genexpr>z _append_audit.<locals>.<genexpr>%   s     !s   r   	timestampsequenceaF)ensure_ascii
)fcntl	AUDIT_LOGparentmkdirtouchopensum
setdefaultr   nowKST	isoformatflockfilenoLOCK_EXwritejsondumpsLOCK_UN)r   r"   fseqs       r   _append_auditr6       s"   4$7OOTO"	iw	/ $1Q!#$
k8<<#4#>#>#@AF:	iw	/ 31AHHJ.	3GGDJJvE:TABKK
EMM23 3	$ $ KK
EMM23 3s0   E:+E>&)E*E>E,E;;E>>Ftask_id	merge_shaproject_pathreasonc                    d|  }|j                         }ddt        |      g}	 t        j                  |g dz   t        j                         	 t        j                  |dd|gz   t        j
                         t        j                  |dd	|d
gz          t        j                  |dddd|gz          t        j                  |ddd|dgz          d|  d}d|  d| d| d}	 t        j                  dddd|d|ddd |g|d!d!d"#      }|j                  d$k(  r|j                  j                         nd%}	| |d(d)d*d+d,g d$||	|d-d.
}t        |       |S # t        j                  $ r Y w xY w# t        $ r}
d&|
 }	Y d'}
~
Jd'}
~
ww xY w# t        j                  $ r/}
| |d(d/d*d+d,g d$d0t        |
      id.
}t        |       |cY d'}
~
S d'}
~
ww xY w)1uE   git revert -m 1 PR 생성. ★ git reset --hard 절대 사용 금지.zrevert/gitz-C)fetchoriginmain)stderrbranchz-Dcheckoutz-bzorigin/mainrevertz	--no-editz-m1pushz-ur>   z--force-with-leasez	[REVERT] u    — auto-revert (probe FAIL)u   ## 자동 Revert PR

- task: u   
- 머지 SHA: `u   `
- 사유: u   

★ post_merge_probe.py가 5분 후 검증한 결과 FAIL 감지하여 자동 생성됨.
회장 명시 승인 후 머지하세요.ghprcreatez--titlez--bodyz--baser?   z--headT<   )cwdcapture_outputtexttimeoutr    u   gh pr create 실패: Nzauto-revertrevertedzauto_revert.pyfailskipped)rA   pr_urlr:   )
r7   r8   tieroutcomemerger	qc_resultscope_guard
diff_filesdiff_locrC   revert_failederror)resolvestr
subprocess
check_callSTDOUTDEVNULLCalledProcessErrorrun
returncodestdoutstrip	Exceptionr6   )r7   r8   r9   r:   rA   rJ   titlebodyr   rR   er   s               r   create_revert_prrk   0   s5   wi F'')L$L)
*CCc$??
HYHYZ	!!#4(@"@I[I[\ 	cZv}$MMNcX{D#y$QQRcVT8VEY$ZZ[G9$ABi  '[ ) !89 	
	1tXy%4SY[cekl #A *+):QXX^^%F
 "!!&$   
  	f] ,, 		4  	1,QC0F	1* (( "!&&$A'
 	fsm   *F +E ;A(F $AE+ 4F E(%F 'E((F +	F4E>9F >FF G$G=GG__main__z	--task-idT)requiredz--merge-shaz--project-path)defaultz--reasonzhealth probe FAILF   )r    indent)%__doc__argparser1   loggingosr^   r   r   r   pathlibr   r+   environget	WORKSPACEr#   basicConfigINFO	getLoggerloggerdictr6   r]   rk   __name__ArgumentParserparseradd_argument
parse_argsargsr7   r8   r9   r:   resultprintr2   r       r   <module>r      s      	  2 2 yq!" 02GHI	 7*-==	   ',,/X Y			=	)3$ 34 3 Ic Ic I Is IW[ IX z$X$$&F
d3
5
(#i.A

,?@DdllDNNDARAR<SUYU`U`aF	*$**V%
:; r   