
    wiS7                       d dl mZ d dlZd dlZd dlZd dl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 d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm Z  d dl!m"Z" d dl#m$Z$ d dl%m&Z&  ej'        d          Z(dPdZ)dQdZ*dddRd%Z+dSd+Z, G d, d-          Z-dTd1Z.d2Z/d3Z0dUd6Z1dVd?Z2dWdBZ3dXdEZ4dYdFZ5dZdIZ6d[dJZ7d\dLZ8ej9        fd]dOZ:dS )^    )annotationsN)	Generator)Iterable)MutableMapping)Sequence)Anytags_from_path)color)git)output)	languages)load_config)Hook)	all_hooks)install_hook_envs)staged_files_only)Storecmd_output_b
pre_commitmsgstrreturnintc                L    dddddddt          fd| D                       S )N      )AFHNNaWc              3  L   K   | ]}t          j        |                   V  d S N)unicodedataeast_asian_width).0cwidthss     g/root/.openclaw/workspace/chatterbox_venv_py311/lib/python3.11/site-packages/pre_commit/commands/run.py	<genexpr>z_len_cjk.<locals>.<genexpr>&   s3      DD1vk21556DDDDDD    )sum)r   r+   s    @r,   _len_cjkr0   $   s;    111AA>>FDDDDDDDDDDr.   startcolsend_lenc                D    d|t          |           z
  |z
  dz
  z  }|  | S )N.r   )r0   )r1   r2   r3   dotss       r,   
_start_msgr7   )   s2    $%(72Q67DTr.    )postfixend_msg	end_color	use_colorboolr9   c                    d|t          |           z
  t          |          z
  t          |          z
  dz
  z  }t          j        |||          }|  | | | dS )Nr5   r   
)r0   lenr   format_color)r1   r2   r:   r;   r<   r9   r6   ends           r,   	_full_msgrC   .   sf     $%(3w<<7#g,,FJKD

Wi
;
;C+T+7+C++++r.   namesIterable[str]includeexcludeGenerator[str]c                v    t          j        |          t          j        |          cfd| D             S )Nc              3  p   K   | ]0}                     |                               |          ,|V  1d S r&   )search)r)   filename
exclude_re
include_res     r,   r-   z,filter_by_include_exclude.<locals>.<genexpr>B   sc        X&&   **     r.   )recompile)rD   rF   rG   rM   rN   s      @@r,   filter_by_include_excluderQ   <   sV    
  Z00"*W2E2EJ
    !&   r.   c                  `    e Zd ZddZej        dd	            ZddZddZe	dd            Z
dS )
Classifier	filenamesrE   r   Nonec                (    d |D             | _         d S )Nc                P    g | ]#}t           j                            |          !|$S  )ospathlexistsr)   fs     r,   
<listcomp>z'Classifier.__init__.<locals>.<listcomp>K   s+    EEE"'//!2D2DE!EEEr.   )rT   )selfrT   s     r,   __init__zClassifier.__init__J   s    EEYEEEr.   rL   r   set[str]c                     t          |          S r&   r	   )r_   rL   s     r,   _types_for_filezClassifier._types_for_fileM   s    h'''r.   rD   typestypes_orexclude_typesrH   c              #     K   t          |          }t          |          }t          |          }|D ]-}|                     |          }||k    r|r||z  r	||z  s|V  .d S r&   )	frozensetrc   )r_   rD   rd   re   rf   rL   tagss          r,   by_typeszClassifier.by_typesQ   s       %  X&&!-00 	 	H''11DEMM! "%)H_ "}, " 	 	r.   hookr   c                    |                      t          | j        |j        |j                  |j        |j        |j                  S r&   )rj   rQ   rT   filesrG   rd   re   rf   )r_   rk   s     r,   filenames_for_hookzClassifier.filenames_for_hookd   sF    }}%
 
 JM	
 	
 		
r.   rF   rG   c                    t           j        dk    rt           j        dk    rd |D             }t          |||          }t	          |          S )N/\c              3  j   K   | ].}|                     t          j        t          j                  V  /d S r&   )replacerY   sepaltsepr\   s     r,   r-   z)Classifier.from_config.<locals>.<genexpr>|   s4      II!262955IIIIIIr.   )rY   ru   rt   rQ   rS   )clsrT   rF   rG   s       r,   from_configzClassifier.from_configp   sM     9$IIyIIII-i'JJ	)$$$r.   N)rT   rE   r   rU   )rL   r   r   ra   )
rD   rE   rd   rE   re   rE   rf   rE   r   rH   )rk   r   r   rH   )rT   rE   rF   r   rG   r   r   rS   )__name__
__module____qualname__r`   	functoolscacherc   rj   rn   classmethodrw   rX   r.   r,   rS   rS   I   s        F F F F _( ( ( _(   &

 

 

 

 % % % [% % %r.   rS   environMutableMapping[str, str]ra   c                l    |                      dd          }d |                    d          D             S )NSKIPr8   c                ^    h | ]*}|                                 |                                 +S rX   )strip)r)   skips     r,   	<setcomp>z_get_skips.<locals>.<setcomp>   s-    FFFTFDJJLLFFFr.   ,)getsplit)r~   skipss     r,   
_get_skipsr      s5    KK##EFFU[[%5%5FFFFr.   Skippedz(no files to check)srU   c                j    t          j        t          j        | t          j        |                     d S r&   )r   
write_liner   rA   SUBTLE)r   r<   s     r,   _subtle_liner      s*    
e(EL)DDEEEEEr.   
classifierrk   r   r   diff_beforebytesverbosetuple[bool, bytes]c           
        t          |                     |                    }|j        |v s	|j        |v rFt	          j        t          |j        t          t          j
        ||                     d }d}	|}
d}d}n|sS|j        sLt	          j        t          |j        t          t          t          j        ||                     d }d}	|}
d}d}nNt	          j        t          |j        d|                     |j        sd}t!          j                    }t$          |j                 }|                    |j        |j                  5  |                    |j        |j        |j        ||j        d	k    |j        |
          \  }	}d d d            n# 1 swxY w Y   t9          t!          j                    |z
  d          pd}t;                      }
||
k    }|	s|rt          j        }d}nt          j        }d}t	          j         t          j!        |||                     |s|j"        s|	s|rtG          d|j         |           |s|j"        r|tG          d| d|           |	rtG          d|	 |           |rtG          d|           |$                                rSt	          j                      t	          j%        |$                                |j&                   t	          j                      |ptO          |	          |
fS )N)r1   r:   r;   r<   r2   r   Fr.   )r1   r9   r:   r;   r<   r2      )r1   r3   r2   rX   local)is_localrequire_serialr   r   FailedPassedz- hook id: z- duration: r   z- exit code: z"- files were modified by this hook)logfile_name)(tuplern   idaliasr   writerC   nameSKIPPEDr   YELLOW
always_runNO_FILES	TURQUOISEr7   pass_filenamestime	monotonicr   languagein_envprefixlanguage_versionrun_hookentryargssrcr   round	_get_diffREDGREENr   rA   r   r   r   write_line_blog_filer=   )r   rk   r   r2   r   r   r<   rT   durationretcode
diff_afterfiles_modifiedouttime_beforer   print_colorstatuss                    r,   _run_single_hookr      s    j33D99::Iw%4:..i,#  	
 	
 	
  
 /Nt /Ni /#  		
 		
 		
  
 	ZdiFFFGGG" 	In&&T]+__T[$*?@@ 		 		#,,
	W,#2 -  LGS		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 ))K7;;@q[[
 %
2 	n 	)KFF+KF%,V[)LLMMM  $,  '  ^  ,47,,i888 	@t| 	@)=3333Y??? 	?222I>>>  	J=yIII99;; 	 		$-HHHH*T']]J66s   =FFFhooksSequence[Hook]c                    | rt          d | D                       }nd}|dz   t          t                    z   dz   t          t                    z   }t          |d          S )zCompute the number of columns to display hook messages.  The widest
    that will be displayed is in the no files skipped case:

        Hook name...(no files to check) Skipped
    c              3  >   K   | ]}t          |j                  V  d S r&   )r0   r   )r)   rk   s     r,   r-   z _compute_cols.<locals>.<genexpr>   s,      ==tx	**======r.   r      r   P   )maxr@   r   r   )r   name_lenr2   s      r,   _compute_colsr      sa      ==u=====a<#h--'!+c'll:DtR==r.   r   argparse.Namespacec                V   | j         dv rdS | j         dv r| j        fS | j        r&| j        rt	          j        | j        | j                  S | j        r| j        S | j        rt	          j                    S t	          j	                    rt	          j
                    S t	          j                    S )N>   
post-merge
pre-rebasepost-commitpost-rewritepost-checkoutrX      
commit-msgprepare-commit-msg)
hook_stagecommit_msg_filenamefrom_refto_refr   get_changed_filesrm   	all_filesget_all_filesis_in_merge_conflictget_conflicted_filesget_staged_files)r   s    r,   _all_filenamesr      s        r	@	@	@(**	 	&4; 	&$T]DK@@@	 &z	 & """		!	#	# &')))#%%%r.   c                 8    t          dddddd          \  } }} |S )Nr   diff--no-ext-diffz--no-textconvz--ignore-submodulesFcheckr   )_r   s     r,   r   r     s2    v9N  IAsA Jr.   configdict[str, Any]c           
        t          |          }t                              t          |          | d         | d                   }d}t	                      }|D ]F}t          ||||||j        |j                  \  }	}||	z  }| d         p|j        p|j        }
|	r|
r nG|r_|j	        rX|rV|j
        rt          j        d           t          j        d           |j        rdnd	}t          j        d
dddd| f           |S )zActually run the hooks.rm   rG   r   )r   r<   	fail_fastzpre-commit hook(s) made changes.
If you are seeing this message in CI, reproduce locally with: `pre-commit run --all-files`.
To run `pre-commit` as part of git workflow, use `pre-commit install`.zAll changes made by hooks:alwaysneverr   z
--no-pagerr   r   z--color=)r   rS   rw   r   r   r   r   r   r   show_diff_on_failurer   r   r   
subprocesscall)r   r   r   r   r2   r   retval
prior_diffrk   current_retvalr   git_color_opts               r,   
_run_hooksr     sZ    D''tfWovi/@ J FJ  %5eT:LDJ&
 &
 &
"
 	. K(LDNLdn	 	i 	E $+ 
 > 	(   	6777 %)J;G<&}&&
 	 	 	
 Mr.   c                 n    t          ddd          \  } }} t          |                                          S )Nr   zls-filesz
--unmerged)r   r=   r   )r   stdouts     r,   _has_unmerged_pathsr   E  s/    z<@@LAvqr.   config_filec                @    t          dddd| d          \  }}}|dk    S )Nr   r   z--quietr   Fr   r   r   )r   r   r   s      r,   _has_unstaged_configr   J  s5     vy/;e  MGQ a<r.   storer   c                  	 j          oj         }|r*t                      rt                              d           dS t          j                  t          j                  k    rt                              d           dS |r/t          |           r t                              d|  d           dS j	        dv r,j
        s%t                              dj	         d           dS j	        d	k    r|                    d
          rdS j        r
j        |d<   j        r
j        |d<   j        r/j        r(j        |d<   j        |d<   j        |d<   j        |d<   j        rj        rj        |d<   j        |d<   j        r=j        r6j        r/j        r(j        |d<   j        |d<   j        |d<   j        |d<   j        r
j        |d<   j        r
j        |d<   j        r
j        |d<   d|d<   t/          j                    5 }|r'|                    t5          |j                             t9          |           }fdt;          ||          D             }j        r5|s3t?          j         dj         dj	         d           	 d d d            dS tC          |          		fd |D             }tE          ||           tG          ||	          cd d d            S # 1 swxY w Y   tI          d!          )"Nz+Unmerged files.  Resolve before committing.r   z%Specify both --from-ref and --to-ref.z4Your pre-commit configuration is unstaged.
`git add z` to fix this.r   z6`--commit-msg-filename` is required for `--hook-stage `r   _PRE_COMMIT_SKIP_POST_CHECKOUTr   PRE_COMMIT_COMMIT_MSG_SOURCEPRE_COMMIT_COMMIT_OBJECT_NAMEPRE_COMMIT_ORIGINPRE_COMMIT_SOURCEPRE_COMMIT_FROM_REFPRE_COMMIT_TO_REFPRE_COMMIT_PRE_REBASE_UPSTREAMPRE_COMMIT_PRE_REBASE_BRANCHPRE_COMMIT_LOCAL_BRANCHPRE_COMMIT_REMOTE_BRANCHPRE_COMMIT_REMOTE_NAMEPRE_COMMIT_REMOTE_URLPRE_COMMIT_CHECKOUT_TYPEPRE_COMMIT_IS_SQUASH_MERGEPRE_COMMIT_REWRITE_COMMAND1
PRE_COMMITc                ~    g | ]9}j         r |j        j         k    s|j        j         k    rj        |j        v 7|:S rX   )rk   r   r   r   stages)r)   rk   r   s     r,   r^   zrun.<locals>.<listcomp>  s]     
 
 
9
 !%49 4 4
di8O8O$+--  .--r.   zNo hook with id `z` in stage `c                8    g | ]}|j         v|j        v|S rX   )r   r   )r)   rk   r   s     r,   r^   zrun.<locals>.<listcomp>  s<     
 
 
we##
%(?(? (?(?(?r.   unreachable)%r   rm   r   loggererrorr=   r   r   r   r   r   r   prepare_commit_message_sourcecommit_object_namepre_rebase_upstreampre_rebase_branchremote_name
remote_urlremote_branchlocal_branchcheckout_typeis_squash_mergerewrite_command
contextlib	ExitStackenter_contextr   	directoryr   r   rk   r   r   r   r   r   AssertionError)
r   r   r   r~   stash
exit_stackr   r   
to_installr   s
     `      @r,   runr(  R  se    1tz>E  $&& BCCCqDMd4;////<===q %k22 4#4 4 4	
 	
 	
 qOCCC( D 	0!_0 0 0	
 	
 	
 q O..KK899 / q ) 
. 	./  K373J/0 } 3 3'+}#$'+{#$)-%&'+{#$ ID$: I484L01262H./ 	;!_;;#0; .2->)*.2.@*+,0,<()+/?'( A.2.@*+ E040D,- E040D,-  GL				 6: 	I$$%6u%G%GHHH[))
 
 
 
!&%00
 
 
 9 	U 	MDIMM4?MMM   !6 6 6 6 6 6 6 6$ 7##
 
 
 

 
 


 	*e,,,&%5556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6: 
'
''s   BK2'>K22K69K6)r   r   r   r   )r1   r   r2   r   r3   r   r   r   )r1   r   r2   r   r:   r   r;   r   r<   r=   r9   r   r   r   )rD   rE   rF   r   rG   r   r   rH   )r~   r   r   ra   )r   r   r<   r=   r   rU   )r   rS   rk   r   r   ra   r2   r   r   r   r   r=   r<   r=   r   r   )r   r   r   r   )r   r   r   rE   )r   r   )
r   r   r   r   r   ra   r   r   r   r   )r   r=   )r   r   r   r=   )
r   r   r   r   r   r   r~   r   r   r   );
__future__r   argparser   r{   loggingrY   rO   r   r   r'   collections.abcr   r   r   r   typingr   identify.identifyr
   r   r   r   r   pre_commit.all_languagesr   pre_commit.clientlibr   pre_commit.hookr   pre_commit.repositoryr   r   pre_commit.staged_files_onlyr   pre_commit.storer   pre_commit.utilr   	getLoggerr  r0   r7   rC   rQ   rS   r   r   r   r   r   r   r   r   r   r   r   r~   r(  rX   r.   r,   <module>r7     sE   " " " " " "           				 				          % % % % % % $ $ $ $ $ $ * * * * * * $ $ $ $ $ $       , , , , , ,                   . . . . . . , , , , , ,             + + + + + + 3 3 3 3 3 3 : : : : : : " " " " " " ( ( ( ( ( ( 
	<	(	(E E E E
    , , , , , ,
 
 
 
5% 5% 5% 5% 5% 5% 5% 5%pG G G G
  F F F F]7 ]7 ]7 ]7@   & & & &*   ( ( ( (V       
    -/J	n( n( n( n( n( n( n(r.   