Viewing File: /opt/hc_python/lib/python3.12/site-packages/pre_commit/__pycache__/git.cpython-312.pyc

�

i0iO!��>�ddlmZddlZddlZddlZddlmZddlm	Z	ddl
mZddl
mZddl
m
Z
eje�ZdZdd	�Zd d!d
�Zd"d�Zd#d$d
�Zd#d$d�Zd%d�Zd&d�Zd'd�Zd d(d�Zd)d�Zd)d�Zd*d�Zd+d�Zdd�d,d�Zd%d�Z d-d�Z!d#d.d�Z"d#d/d�Z#d0d�Z$d1d�Z%y)2�)�annotationsN)�Mapping)�
FatalError)�CalledProcessError)�
cmd_output��cmd_output_b)z-czcore.useBuiltinFSMonitor=falsec�N�|jd�}|r|jd�SgS)N�)�strip�split)�ss �=/opt/hc_python/lib/python3.12/site-packages/pre_commit/git.py�zsplitrs%��	����
�A���w�w�t�}���	�c���|�|ntj}|j�D��cic].\}}|jd�r|jd�s|dvr||��0c}}Scc}}w)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&sl���#�4����D������%���A��|�|�F�#�	���=�>�	�
�	
�	
�1������s�3Ac�
�	tjjtddd�dj	��}tddd�dj	�}|dk7rt
d��|S#t
$rt
d��wxYw)	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�abspathrrrr)�root�inside_git_dirs  r�get_rootr03s���

��w�w����u�k�=�9�!�<�B�B�D�
��$��;� 5�
�
�
�
�U�W�	��� ��
>�
�	
��K���
��
�
�	
�
�s�AA-�-B�.c���d}tdd||��\}}}|j�}||k7r=tjj	tjj||��St
d��)Nz	--git-dirr(r)��cwdzunreachable: no git dir)rrrr,�normpath�join�AssertionError)�git_root�opt�_�out�git_dirs     r�get_git_dirr=Ls_��
�C��5�+�s��A�I�A�s�A��i�i�k�G��#�~��w�w��������X�w� ?�@�@��6�7�7rc���d}tdd||��\}}}|j�}||k7r=tjj	tjj||��St
|�S)Nz--git-common-dirr(r)r3)rrrr,r5r6r=)r8r9r:r;�git_common_dirs     r�get_git_common_dirr@Vs_��
�C��5�+�s��A�I�A�s�A��Y�Y�[�N�����w�w��������X�~� F�G�G��8�$�$rc��td�}tjjtjj	|d��xr=tjjtjj	|d��S)Nr1�	MERGE_MSG�
MERGE_HEAD)r=rr,�existsr6)r<s r�is_in_merge_conflictrE`sT���#��G�
�����r�w�w�|�|�G�[�9�:�	<�
�����r�w�w�|�|�G�\�:�;�rc��|j�D�cgc]@}|jd�r-|jd�j�j	���Bc}Scc}w)N)�	s#	�#)�
splitlinesr"�lstripr�decode)�	merge_msg�lines  r�parse_merge_msg_for_conflictsrNhsY���(�(�*��*�D��?�?�?�+�	
���D����!�(�(�*�*����s�AAc��tjd�ttjjt
d�d�d�5}|j�}ddd�t�}tdd�dj�}ttddd	d
dd|d
dd�
d�}t|�t|�zS#1swY�hxYw)Nz#Checking merge-conflict files only.r1rB�rbr(z
write-treer*�diff�--name-only�
--no-ext-diff�-zz-m�HEADrCz--)
�logger�info�openrr,r6r=�readrNrrr�set)�frL�merge_conflict_filenames�	tree_hash�merge_diff_filenamess     r�get_conflicted_filesr_rs���
�K�K�5�6�
�b�g�g�l�l�;�s�+�[�9�4�	@�A��F�F�H�	�
A�<�Y�G��
�5�,�/��2�8�8�:�I�!���6�=�/�4��)�V�\�4�	
��	
����'�(�3�/C�+D�D�D�
A�	@�s�	C�C
c�@�ttddddddd|��d	�S)
Nr(rQz--stagedrRrSrTz--diff-filter=ACMRTUXBr3r*�rrr3s r�get_staged_filesrb�s4�����6�:�}�o�t�$��		
�
�	
��rc	�B�tddddddd�\}}}t|�S)Nr(rQrSz--ignore-submodulesz--diff-filter=ArRrT)rr)r:�stdouts  r�intent_to_add_filesre�s/���
�v��(=��=�$��L�A�v�q��&�>�rc�4�ttddd�d�S)Nr(zls-filesrTr*ra�rr�
get_all_filesrh�s���*�U�J��5�a�8�9�9rc��d}	tg|�|�d|�����\}}}t|�S#t$r#tg|�|�d|�����\}}}Yt|�SwxYw)N)r(rQrRrSrTz...z..)rrr)�old�new�diff_cmdr:r;s     r�get_changed_filesrm�sz��D�H�;��;��;�S�E��S�E�*:�;�	��3���#�;����;��:��:�S�E��C�5�/�:�	��3���#�;��;�s�%�A�Ac�N�tddd|d�\}}}|j�dS)Nr(z	ls-remotez--exit-coderUr)rr
)�remoter:r;s   r�head_revrp�s*���5�+�}�f�f�M�I�A�s�A��9�9�;�q�>�r)�repoc�8�ddddg|��}t||dd��ddk(S)	Nr(rQz--quietrSF)r4�checkrr*r)rq�args�cmds   r�has_diffrv�s.���&�)�_�
<�t�
<�C���$�e�4�Q�7�1�<�<rc�Z�tdddd��\}}}t|j��S)Nr(�configzcore.hooksPathF)rs)r	�boolr)r:r;s  r�has_core_hookpaths_setrz�s*���U�H�.>�e�L�I�A�s�A���	�	���rc��tjj|�rtjj|�}dgt��}t�}t
g|�d�d�|��d|i�t
g|�d�d�d�|��||d��y)	Nr(�initz--template=�envro�add�origin�r4r})rr,�isdirr-�
NO_FS_MONITORr&r	)r,ror(r}s    r�	init_repor��s}��	�w�w�}�}�V��������(���
!�=�
!�C�
�,�C��<�#�<�v�<�}�<�d�<��<��L�#�L�x�L��L��L�&�L�d��Lrc�f�t�}d\}}|x|d<|d<|x|d<|d<d}t|||d��y)N)z
pre-commitzasottile+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	)rqr}�name�emailrus     rr�r��sO��
�,�C�?�K�D�%�9=�=�C���S�!5�6�;@�@�C���c�"7�8�
I�C��#�4�S�)rc��tddd||��\}}}tjj||j	��S)Nr(r)z
--git-pathr3)rrr,r6r)r�rqr:r;s    r�git_pathr��s5���5�+�|�T�t�L�I�A�s�A�
�7�7�<�<��c�i�i�k�*�*rc��tjdvr]tjdk(}	t�}|j	d�}||zr(ddd�}t
j
d||�d	||�d
��yyy#t$rYywxYw)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�platformr0rr"rV�warning)�is_cygwin_python�toplevel�
is_cygwin_git�exe_types    r�check_for_cygwin_mismatchr��s���
�|�|�*�*��<�<�8�3��	��z�H�!�+�+�C�0�
��m�+�(��=�H��N�N��
&�&6�7�8�9�"�=�1�2�"�
6�
�,�+���	��	�s�
A1�1	A=�<A=c�x�tdgt�d�d�|��d|i�dj�}|D]
}d|vs�|cS|S)z�Get 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-atr4r*r1)rr�rI)�rev�git_repo�tagsr�s    r�get_best_candidate_tagr��sj���
����$��&3��58��>F���	�	���	����#�:��J���Jr)r�str�return�	list[str])N)r#zMapping[str, str] | Noner�zdict[str, str])r�r�)r1)r8r�r�r�)r�ry)rL�bytesr�r�)r�zset[str])r4z
str | Noner�r�)r�r�)rjr�rkr�r�r�)ror�r�r�)rtr�rqr�r�ry)r,r�ror�r��None)rqr�r�r�)r�r�rqr�r�r�)r�r�)r�r�r�r�r�r�)&�
__future__r�logging�os.pathrr��collections.abcr�pre_commit.errorsr�pre_commit.utilrrr	�	getLogger�__name__rVr�rr&r0r=r@rErNr_rbrerhrmrprvrzr�r�r�r�r�rgrr�<module>r�s���"���
�#�(�.�&�(�	��	�	�8�	$��9�
���0�28�%���E�*��:�	��
&)�=�
�
M�*�+�
�.r
Back to Directory File Manager