
    Umjw                        d Z ddlZddlZddlZddlZddlmZ ddlZ ee	      j                         j                  d   Zedz  dz  dz  Zedz  dz  Zedz  d	z  Zd
 Zd Z ej$                  d      defd       Z ej$                  d      defd       Z ej$                  d      defd       ZdefdZdefdZdefdZdefdZy)u  
test_scope_guard_lock_sha_2569.py
MT-T3: AD-1~3 검증 (lock_sha..HEAD scope guard)
  - pre-push hook lock_sha 추출 + _DIFF_BASE 분기 + worktree 감지 로직
  - pre_push_guard.py _resolve_diff_base() 정의 + lock_sha 키 사용
  - task_scope.py base_sha auto 분기 + _resolve_diff_base 호출
  - _resolve_diff_base() 동작 검증 (lock_sha fallback vs origin/main fallback)
    N)Path   scriptsz	git-hookszpre-pushzpre_push_guard.pyztask_scope.pyc                     t        t        dz        } t        t              }| |fD ]5  }|t        j                  vst        j                  j	                  d|       7 t
        j                  j                  dt              }t
        j                  j                  |      }	 |j                  j                  |       |S # t        $ r Y yw xY w)u   pre_push_guard.py를 importlib으로 로드.

    qc_report_guard / task_scope 의존성을 sys.path에 미리 삽입한다.
    r   r   pre_push_guardN)str	WORKSPACEsyspathinsert	importlibutilspec_from_file_locationPRE_PUSH_GUARD_PYmodule_from_specloaderexec_module	Exceptionscripts_dirworkspace_rootpspecmods        2tests/regression/test_scope_guard_lock_sha_2569.py_load_pre_push_guardr      s    
 i)+,K^N>* "CHHHHOOAq!" >>112BDUVD
..
)
)$
/C$ J     "B? ?	C
Cc                     t        t        dz        } t        t              }| |fD ]5  }|t        j                  vst        j                  j	                  d|       7 t
        j                  j                  dt              }t
        j                  j                  |      }	 |j                  j                  |       |S # t        $ r Y yw xY w)u(   task_scope.py를 importlib으로 로드.r   r   task_scope_modN)r   r	   r
   r   r   r   r   r   TASK_SCOPE_PYr   r   r   r   r   s        r   _load_task_scoper!   .   s    i)+,K^N>* "CHHHHOOAq!" >>112BMRD
..
)
)$
/C$ J  r   module)scopereturnc                  r    t         j                         sJ dt                 t         j                  d      S )Nu   pre-push hook 없음: utf-8encoding)PRE_PUSH_HOOKexists	read_text     r   pre_push_contentr.   @   5    !K%;M?#KK!""G"44r-   c                  r    t         j                         sJ dt                 t         j                  d      S )Nu   pre_push_guard.py 없음: r&   r'   )r   r*   r+   r,   r-   r   guard_py_contentr1   F   s7    ##%W)CDUCV'WW%&&&88r-   c                  r    t         j                         sJ dt                 t         j                  d      S )Nu   task_scope.py 없음: r&   r'   )r    r*   r+   r,   r-   r   task_scope_contentr3   L   r/   r-   r.   c                 F    d| v sJ d       d| v sJ d       d| v sJ d       y)um   pre-push hook에 lock_sha 추출, _DIFF_BASE 분기, worktree 컨텍스트 감지 로직이 있어야 한다.lock_shauY   pre-push hook에 'lock_sha' 키 참조가 없습니다. AD-1~3 구현을 확인하세요.
_DIFF_BASEuW   pre-push hook에 '_DIFF_BASE' 변수가 없습니다. AD-1~3 구현을 확인하세요.
.worktreesut   pre-push hook에 worktree 컨텍스트 감지 로직이 없습니다. '.worktrees' 경로 패턴이 필요합니다.Nr,   )r.   s    r    test_pre_push_hook_uses_lock_shar8   T   sS    )) c) ++ a+ ++ 	9+r-   r1   c                 0    d| v sJ d       d| v sJ d       y)uc   pre_push_guard.py에 _resolve_diff_base() 함수 정의와 lock_sha 키 사용이 있어야 한다._resolve_diff_baseuc   pre_push_guard.py에 '_resolve_diff_base' 함수가 없습니다. AD-1~3 구현을 확인하세요.r5   u[   pre_push_guard.py에 'lock_sha' 키 사용이 없습니다. AD-2 구현을 확인하세요.Nr,   )r1   s    r   )test_pre_push_guard_has_resolve_diff_baser;   e   s6    #33 m3 )) e)r-   r3   c                 L    d| v xs
 d| v xs d| v }|sJ d       d| v sJ d       y)u\   task_scope.py에 base_sha auto/AUTO 분기와 _resolve_diff_base 호출이 있어야 한다.zbase_sha in ("auto", "AUTO")zbase_sha == "auto"zbase_sha == 'auto'ub   task_scope.py에 base_sha auto/AUTO 분기 로직이 없습니다. AD-3 구현을 확인하세요.r:   u_   task_scope.py에 '_resolve_diff_base' 호출이 없습니다. AD-1~3 구현을 확인하세요.Nr,   )r3   has_auto_branchs     r   %test_task_scope_accepts_auto_base_shar>   q   s]     	'*<< 	6!%77	6#55 
  l?  #55 i5r-   tmp_pathc                    d}d}| dz  dz  }|j                  d       || dz  }|j                  t        j                  ||d             t	               }|t        j                  d
       |j                  dd       |j                  |        |j                  ||       }|dk(  s
J d|        |j                  dt        | dz  |z  ddz  z                |j                  ||       }||k(  s
J d|        y	)u   _resolve_diff_base() 동작 검증.

    시나리오 A: 일반 컨텍스트(worktree 아님) + lock_sha 있어도 → origin/main 반환.
    시나리오 B: worktree 컨텍스트(GIT_DIR에 .worktrees 포함) + lock_sha → lock_sha 반환.
    z	task-9999(abcdef1234567890abcdef1234567890abcdef12z.taskslocksT)parentsz.lock)task_idr5   NuP   task_scope.py 로드 실패 — 의존성 누락 (정적 검증으로 대체됨)GIT_DIR zorigin/mainu=   일반 컨텍스트에서 origin/main 반환 기대, 실제: r7   z-dev1z.gituG   worktree 컨텍스트 + lock_sha에서 lock_sha 반환 기대, 실제: )mkdir
write_textjsondumpsr!   pytestskipsetenvchdirr:   r   )	r?   monkeypatchrD   fake_shalock_dir	lock_filets_modresult_aresult_bs	            r   (test_resolve_diff_base_lock_sha_fallbackrV      s$    G9H("W,HNN4N gYe,,IX$NOP F~fg y"%h(((;H}$ 
GzR$
 y#h&=&G'TZJZ&Z"[\(((;Hx 
QRZQ[\r-   )__doc__importlib.utilr   rI   osr
   pathlibr   rK   __file__resolverC   r	   r)   r   r    r   r!   fixturer   r.   r1   r3   r8   r;   r>   rV   r,   r-   r   <module>r^      s     	 
  N""$,,Q/	I%3j@	),?? I%7
*$ h5# 5  5
 h9# 9  9
 h5C 5  5s " c $"t "r-   