
    MiO!                    t   S SK Jr  S SKrS SKrS SKrS SKJr  S SKJ	r	  S SK
Jr  S SK
Jr  S SK
Jr  \R                  " \5      rSrSS	 jrS S!S
 jjrS"S jrS#S$S jjrS#S$S jjrS%S jrS&S jrS'S jrS S(S jjrS)S jrS)S jrS*S jrS+S jrSS.S,S jjrS%S jr S-S jr!S#S.S jjr"S#S/S jjr#S0S jr$S1S jr%g)2    )annotationsN)Mapping)
FatalError)CalledProcessError)
cmd_outputcmd_output_b)z-czcore.useBuiltinFSMonitor=falsec                X    U R                  S5      n U (       a  U R                  S5      $ / $ )N )stripsplit)ss    h/var/www/eduai.edurigo.com/storigo/production/storigo_env/lib/python3.13/site-packages/pre_commit/git.pyzsplitr      s%    	Awwt}	    c                    U b  U O[         R                  n U R                  5        VVs0 s H;  u  pUR                  S5      (       a  UR                  S5      (       d  US;   d  M9  X_M=     snn$ s  snnf )NGIT_)GIT_CONFIG_KEY_GIT_CONFIG_VALUE_>	   GIT_SSHGIT_ASKPASSGIT_EXEC_PATHGIT_SSL_CAINFOGIT_SSH_COMMANDGIT_CONFIG_COUNTGIT_SSL_NO_VERIFYGIT_ALLOW_PROTOCOLGIT_HTTP_PROXY_AUTHMETHOD)osenvironitems
startswith)_envkvs      r   
no_git_envr&      sp     #4D%||F##	=>>	 
 	
 	  s   8A/%A/c                     [         R                  R                  [        SSS5      S   R	                  5       5      n [        SSS5      S   R	                  5       nUS:w  a  [        S5      eU $ ! [
         a    [        S5      ef = f)	Ngit	rev-parsez--show-cdup   z--is-inside-git-dirzGgit failed. Is it installed, and are you in a Git repository directory?falsezfgit toplevel unexpectedly empty! make sure you are not inside the `.git` directory of your repository.)r   pathabspathr   r   r   r   )rootinside_git_dirs     r   get_rootr0   3   s    

wwuk=9!<BBD
 $; 5

UW 	  >
 	
 K  

 	

s   AA. .B.c                    Sn[        SSXS9u  p#nUR                  5       nXA:w  a<  [        R                  R	                  [        R                  R                  X5      5      $ [        S5      e)Nz	--git-dirr(   r)   cwdzunreachable: no git dir)r   r   r   r,   normpathjoinAssertionError)git_rootopt_outgit_dirs        r   get_git_dirr=   L   sW    
C5+sAIAAiikG~wwX ?@@677r   c                    Sn[        SSXS9u  p#nUR                  5       nXA:w  a<  [        R                  R	                  [        R                  R                  X5      5      $ [        U 5      $ )Nz--git-common-dirr(   r)   r3   )r   r   r   r,   r5   r6   r=   )r8   r9   r:   r;   git_common_dirs        r   get_git_common_dirr@   V   sW    
C5+sAIAAYY[NwwX FGG8$$r   c                    [        S5      n [        R                  R                  [        R                  R	                  U S5      5      =(       a=    [        R                  R                  [        R                  R	                  U S5      5      $ )Nr1   	MERGE_MSG
MERGE_HEAD)r=   r   r,   existsr6   )r<   s    r   is_in_merge_conflictrE   `   sT    #G
rww||G[9: 	<
rww||G\:;r   c                    U R                  5        Vs/ s HH  nUR                  S5      (       d  M  UR                  S5      R                  5       R	                  5       PMJ     sn$ s  snf )N)   	s   #	   #)
splitlinesr"   lstripr   decode)	merge_msglines     r   parse_merge_msg_for_conflictsrN   h   s[     ((**D???+ 	+D!((**  s
   A%1A%c                    [         R                  S5        [        [        R                  R                  [        S5      S5      S5       n U R                  5       nS S S 5        [        W5      n[        SS5      S   R                  5       n[        [        SSS	S
SSUSSS5
      S   5      n[        U5      [        U5      -  $ ! , (       d  f       Nm= f)Nz#Checking merge-conflict files only.r1   rB   rbr(   z
write-treer*   diff--name-only--no-ext-diff-zz-mHEADrC   z--)loggerinfoopenr   r,   r6   r=   readrN   r   r   r   set)frL   merge_conflict_filenames	tree_hashmerge_diff_filenamess        r   get_conflicted_filesr_   r   s    
KK56 
bggll;s+[94	@AFFH	 
A<YG
 5,/288:I!6=/4)V\4	
 	 '(3/C+DDD 
A	@s   	C
Cc                :    [        [        SSSSSSSU S9S	   5      $ )
Nr(   rQ   z--stagedrR   rS   rT   z--diff-filter=ACMRTUXBr3   r*   r   r   r3   s    r   get_staged_filesrb      s4    6:}ot$		

 	 r   c            	     @    [        SSSSSSS5      u  pn [        U5      $ )Nr(   rQ   rS   z--ignore-submodulesz--diff-filter=ArR   rT   )r   r   )r:   stdouts     r   intent_to_add_filesre      s-    v(==$LAq &>r   c                 4    [        [        SSS5      S   5      $ )Nr(   zls-filesrT   r*   ra    r   r   get_all_filesrh      s    *UJ5a899r   c                    Sn [        / UQU  SU 3P76 u  p4n[        U5      $ ! [         a    [        / UQU  SU 3P76 u  p4n N,f = f)N)r(   rQ   rR   rS   rT   z...z..)r   r   r   )oldnewdiff_cmdr:   r;   s        r   get_changed_filesrm      sl    DH;;;SESE*:;	 #;  ; ::SEC5/:	;s   $ AAc                L    [        SSSU S5      u  pnUR                  5       S   $ )Nr(   z	ls-remotez--exit-coderU   r   )r   r   )remoter:   r;   s      r   head_revrp      s(    5+}ffMIAA99;q>r   )repoc                6    SSSS/UQ7n[        X SS.6S   S:H  $ )	Nr(   rQ   z--quietrS   F)r4   checkr   r*   r   )rq   argscmds      r   has_diffrv      s,    &)_
<t
<Ce4Q71<<r   c                 R    [        SSSSS9u  pn [        UR                  5       5      $ )Nr(   configzcore.hooksPathF)rs   )r	   boolr   )r:   r;   s     r   has_core_hookpaths_setrz      s(    UH.>eLIAA		r   c                   [         R                  R                  U5      (       a  [         R                  R                  U5      nS/[        Q7n[        5       n[        / UQSPSPU P7SU06  [        / UQSPSPSPUP7XS.6  g )	Nr(   initz--template=envro   addoriginr4   r}   )r   r,   isdirr-   NO_FS_MONITORr&   r	   )r,   ro   r(   r}   s       r   	init_repor      s~    	ww}}V(
!=
!C
,C<#<v<}<d<<L#LxLLL&LdLr   c                b    [        5       nSu  p#U=US'   US'   U=US'   US'   Sn[        X@US.6  g )N)z
pre-commitzasottile+pre-commit@umich.eduGIT_AUTHOR_NAMEGIT_COMMITTER_NAMEGIT_AUTHOR_EMAILGIT_COMMITTER_EMAIL)r(   commitz	--no-editz--no-gpg-signz-nz-minitr   )r&   r	   )rq   r}   nameemailru   s        r   r   r      sK    
,C?KD9==CS!56;@@Cc"78
IC#S)r   c                z    [        SSSXS9u  p#n[        R                  R                  XR	                  5       5      $ )Nr(   r)   z
--git-pathr3   )r   r   r,   r6   r   )r   rq   r:   r;   s       r   git_pathr      s/    5+|TLIAA77<<iik**r   c                 
   [         R                  S;   a_  [         R                  S:H  n  [        5       nUR	                  S5      nX-  (       a&  SSS.n[
        R                  SX0    S	X2    S
35        ggg! [         a     gf = f)z7See https://github.com/pre-commit/pre-commit/issues/354)cygwinwin32r   N/z(cygwin)z	(windows))TFa
  pre-commit has detected a mix of cygwin python / git
This combination is not supported, it is likely you will receive an error later in the program.
Make sure to use cygwin git+python while using cygwin
These can be installed through the cygwin installer.
 - python z
 - git 
)sysplatformr0   r   r"   rV   warning)is_cygwin_pythontoplevelis_cygwin_gitexe_types       r   check_for_cygwin_mismatchr      s    
||**<<83	zH !++C0+(=HNN
 &78 9"12"6 , +  		s   
A5 5
BBc                    [        S/[        QSPSPU P7SU06S   R                  5       nU H  nSU;   d  M  Us  $    U $ )zGet the best tag candidate.

Multiple tags can exist on a SHA. Sometimes a moving tag is attached
to a version tag. Try to pick the tag that looks like a version.
r(   tagz--points-atr4   r*   r1   )r   r   rI   )revgit_repotagsr   s       r   get_best_candidate_tagr      sj     $&358>F		 	 #:J  Jr   )r   strreturn	list[str])N)r#   zMapping[str, str] | Noner   zdict[str, str])r   r   )r1   )r8   r   r   r   )r   ry   )rL   bytesr   r   )r   zset[str])r4   z
str | Noner   r   )r   r   )rj   r   rk   r   r   r   )ro   r   r   r   )rt   r   rq   r   r   ry   )r,   r   ro   r   r   None)rq   r   r   r   )r   r   rq   r   r   r   )r   r   )r   r   r   r   r   r   )&
__future__r   loggingos.pathr   r   collections.abcr   pre_commit.errorsr   pre_commit.utilr   r   r	   	getLogger__name__rV   r   r   r&   r0   r=   r@   rE   rN   r_   rb   re   rh   rm   rp   rv   rz   r   r   r   r   r   rg   r   r   <module>r      s    "   
 # ( . & (			8	$ 9028%E*:	
 &) =

M*+
.r   