
    iU                        d Z ddlZddlZddlZddededefdZdededefd	Ze	d
k(  rddl
Z
ddlZ eej                        dk  r1 e e
j                  ddgddd              ej                   d       ej                  d   Z eej                        dkD  rej                  d   ndZ eee      Z e e
j                  edd             yy)u   
file_touch_ratio_check.py - 보고서 수정 파일 vs 실제 git 변경 파일 비율 검증 verifier

보고서에서 "N개 파일 수정"이라 했는데 실제 git diff에 해당 파일이 없으면 탐지.
    N/home/jay/workspacetask_idworkspace_rootreturnc                    t         j                  j                  |dd|  d      }	 t        |dd      5 }|j	                         }ddd       t        |      }|sddgd
S 	 t        j                  dd|ddgddd       	 t        j                  dd|dddgddd      }t        d |j                  j                         D              }t        |      }	|	|z  }
|	rt!        |
      t!        |	      z  nd}dt!        |	       dt!        |       dt!        |
       d|d g}|d!k(  r5t#        |	|z
        }|dd" D ]  }|j%                  d#|         d$|d%gz   d
S |d&k  r5t#        |	|z
        }|dd" D ]  }|j%                  d#|         d'|d(gz   d
S d)|d
S # 1 sw Y   YxY w# t
        $ r dd	| gd
cY S t        $ r)}ddt        |      j                   d| gd
cY d}~S d}~ww xY w# t        j                  $ r dd| gd
cY S t
        $ r	 ddgd
cY S w xY w# t        j                  $ r}dd| gd
cY d}~S d}~ww xY w)*uB  
    보고서에서 수정 파일 목록을 추출하고 실제 git diff와 대조하여
    File-Touch Ratio를 계산합니다.

    Args:
        task_id: 검사 대상 task ID
        workspace_root: 워크스페이스 루트 경로

    Returns:
        {"status": "PASS"|"FAIL"|"WARN"|"SKIP", "details": [...]}
    memoryreportsz.mdrzutf-8)encodingNSKIPu   보고서 파일 없음: statusdetailsu    보고서 파일 읽기 실패: z: u(   보고서에 수정 파일 섹션 없음gitz-Cz	rev-parsez	--git-dirT)checkcapture_outputtextu   git repo 아님: u"   git 명령어를 찾을 수 없음diffz--name-onlyzHEAD~5c              3   ^   K   | ]%  }|j                         s|j                          ' y w)N)strip).0lines     I/home/jay/workspace/teams/dev5/qc/verifiers.bak/file_touch_ratio_check.py	<genexpr>zverify.<locals>.<genexpr>M   s#       
!4::<DJJL 
s   --u   git diff 실행 실패: g        u   보고서 파일 수: u,   실제 변경 파일 수 (git diff HEAD~5): u   교집합: zFile-Touch Ratio: z.2fr   
   u   미변경: FAILu+   보고서에 명시된 파일 변경 없음g      ?WARNu7   보고서 파일의 50% 이상이 실제 변경 안 됨PASS)ospathjoinopenreadFileNotFoundErrorOSErrortype__name___extract_reported_files
subprocessrunCalledProcessErrorsetstdout
splitlineslensortedappend)r   r   report_pathfreport_contentereported_filesresultgit_changed_filesreported_setintersectionratior   missings                 r   verifyr=      s    '',,~xwisOTK
+sW5 	&VVXN	& -^^LNBC
 	

D.+{C		
$
D.&-J	
    
%+]]%=%=%? 
 
 ~&L"33L5ACL 11sE !\!2 34
6s;L7M6NO
c,'()
U3K(	G z(99:" 	.ANN[,-	. "O!PP
 	
 
(99:" 	.ANN[,-	. "[!\\
 	
 
 	
q	& 	& 
3K=AB
 	
  
:47;K;K:LBqcRS
 	

. (( 
+N+;<=
 	
  
<=
 	

" (( 
21#67
 	

sq   F* FF* #G2 A	H$ F'"F* *G/>G/G*$G/*G/2H!H! H!$I
7I?I
I
r4   c                 ^   |j                  d      }t        j                  dt        j                  |      z   dz   t        j                        }|j                  |       }t               }g }|D ]<  }|j                         }|s||vs|j                  |       |j                  |       > |S )u   
    보고서에서 수정 파일 경로를 추출합니다.

    지원 패턴:
    - 테이블 행: | /home/jay/workspace/... |
    - 목록 항목: - /home/jay/workspace/...
    /z(?:^\|[ \t]*|^-[ \t]+)z
/([^\s|]+))
rstriprecompileescape	MULTILINEfindallr,   r   addr1   )r4   r   basepatternmatchesseenr7   ms           r   r(   r(   z   s       %D jj!BIIdO3mC
G
 oon-G5DF GGI$HHQKMM!	
 M    __main__   r   z;Usage: file_touch_ratio_check.py <task_id> [workspace_root]r   F)ensure_asciiindent   )r   )__doc__r   rA   r)   strdictr=   listr(   r'   jsonsysr/   argvprintdumpsexit_task_id_workspace_root_result rL   r   <module>r`      s    
 	 k
C k
 k
 k
\C   : z
388}qDJJ!/l.mn"	
 	xx{H%(]Q%6chhqk<QOX/G	*$**W5
;<# rL   