o
    WiO!                     @  sL  d dl m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 eeZdZdKddZdLdMddZdNddZdOdPddZdOdPddZdQddZdRd!d"ZdSd$d%ZdLdTd(d)ZdUd*d+ZdUd,d-ZdVd0d1ZdWd3d4Zdd5dXd8d9ZdQd:d;Z dYd>d?Z!dOdZd@dAZ"dOd[dCdDZ#d\dEdFZ$d]dIdJZ%dS )^    )annotationsN)Mapping)
FatalError)CalledProcessError)
cmd_outputcmd_output_b)z-czcore.useBuiltinFSMonitor=falsesstrreturn	list[str]c                 C  s   |  d} | r| dS g S )N )stripsplit)r	    r   B/home/ubuntu/.local/lib/python3.10/site-packages/pre_commit/git.pyzsplit   s   

r   _envMapping[str, str] | Nonedict[str, str]c                 C  s$   | d ur| nt j} dd |  D S )Nc                 S  s2   i | ]\}}| d r| ds|dv r||qS )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)
startswith).0kvr   r   r   
<dictcomp>%   s    zno_git_env.<locals>.<dictcomp>)osenvironitems)r   r   r   r   
no_git_env   s   	r*   c                  C  s`   zt jtdddd  } tdddd  }W n ty%   tdw |dkr.td| S )	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_dirr   r   r   get_root3   s*   r3   .git_rootc                 C  sH   d}t dd|| d\}}}| }||kr tjtj| |S td)Nz	--git-dirr+   r,   cwdzunreachable: no git dir)r   r   r'   r/   normpathjoinAssertionError)r5   opt_outgit_dirr   r   r   get_git_dirL      r?   c                 C  sH   d}t dd|| d\}}}| }||kr tjtj| |S t| S )Nz--git-common-dirr+   r,   r6   )r   r   r'   r/   r8   r9   r?   )r5   r;   r<   r=   git_common_dirr   r   r   get_git_common_dirV   r@   rB   boolc                  C  s4   t d} tjtj| dotjtj| dS )Nr4   	MERGE_MSG
MERGE_HEAD)r?   r'   r/   existsr9   )r>   r   r   r   is_in_merge_conflict`   s   rG   	merge_msgbytesc                 C  s   dd |   D S )Nc                 S  s(   g | ]}| d r|d  qS ))   	s   #	   #)r"   lstripr   decode)r#   liner   r   r   
<listcomp>j   s    z1parse_merge_msg_for_conflicts.<locals>.<listcomp>)
splitlines)rH   r   r   r   parse_merge_msg_for_conflictsh   s   rQ   set[str]c                  C  s   t d ttjtddd} |  }W d    n1 s w   Y  t|}t	ddd 
 }tt	ddd	d
dd|ddd
d }t|t|B S )Nz#Checking merge-conflict files only.r4   rD   rbr+   z
write-treer-   diff--name-only--no-ext-diff-zz-mHEADrE   z--)loggerinfoopenr'   r/   r9   r?   readrQ   r   r   r   set)frH   merge_conflict_filenames	tree_hashmerge_diff_filenamesr   r   r   get_conflicted_filesr   s   



rb   r7   
str | Nonec                 C  s    t tddddddd| dd	 S )
Nr+   rT   z--stagedrU   rV   rW   z--diff-filter=ACMRTUXBr6   r-   r   r   r6   r   r   r   get_staged_files   s   re   c                  C  s"   t ddddddd\} }} t|S )Nr+   rT   rV   z--ignore-submodulesz--diff-filter=ArU   rW   )r   r   )r<   stdoutr   r   r   intent_to_add_files   s
   
rg   c                   C  s   t tdddd S )Nr+   zls-filesrW   r-   rd   r   r   r   r   get_all_files   s   rh   oldnewc                 C  sl   d}zt g ||  d| R  \}}}W t|S  ty5   t g ||  d| R  \}}}Y t|S w )N)r+   rT   rU   rV   rW   z...z..)r   r   r   )ri   rj   diff_cmdr<   r=   r   r   r   get_changed_files   s   $$rl   remotec                 C  s"   t ddd| d\}}}| d S )Nr+   z	ls-remotez--exit-coderX   r   )r   r   )rm   r<   r=   r   r   r   head_rev      rn   )repoargsrp   c                 G  s*   ddddg|R }t || ddd dkS )	Nr+   rT   z--quietrV   F)r7   checkr   r-   r   )rp   rq   cmdr   r   r   has_diff   s   rt   c                  C  s"   t ddddd\} }} t| S )Nr+   configzcore.hooksPathF)rr   )r   rC   r   )r<   r=   r   r   r   has_core_hookpaths_set   ro   rv   r/   Nonec                 C  st   t j|rt j|}dgtR }t }tg |dd| R d|i tg |ddd|R | |d d S )	Nr+   initz--template=envrm   addoriginr7   ry   )r'   r/   isdirr0   NO_FS_MONITORr*   r   )r/   rm   r+   ry   r   r   r   	init_repo   s    *r   c                 C  sF   t  }d\}}| |d< |d< | |d< |d< d}t|| |d d S )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   )rp   ry   nameemailrs   r   r   r   r      s   r   r   c                 C  s*   t ddd| |d\}}}tj|| S )Nr+   r,   z
--git-pathr6   )r   r'   r/   r9   r   )r   rp   r<   r=   r   r   r   git_path   s   r   c                  C  s|   t jdv r:t jdk} zt }W n
 ty   Y dS w |d}| |A r<ddd}td||   d	||  d
 dS dS dS )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platformr3   r   r"   rY   warning)is_cygwin_pythontoplevelis_cygwin_gitexe_typer   r   r   check_for_cygwin_mismatch   s&   




r   revgit_repoc                 C  sH   t dgtdd| R d|id  }|D ]
}d|v r!|  S q| S )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-atr7   r-   r4   )r   r~   rP   )r   r   tagsr   r   r   r   get_best_candidate_tag   s,   r   )r	   r
   r   r   )N)r   r   r   r   )r   r
   )r4   )r5   r
   r   r
   )r   rC   )rH   rI   r   r   )r   rR   )r7   rc   r   r   )r   r   )ri   r
   rj   r
   r   r   )rm   r
   r   r
   )rq   r
   rp   r
   r   rC   )r/   r
   rm   r
   r   rw   )rp   r
   r   rw   )r   r
   rp   r
   r   r
   )r   rw   )r   r
   r   r
   r   r
   )&
__future__r   loggingos.pathr'   r   collections.abcr   pre_commit.errorsr   pre_commit.utilr   r   r   	getLogger__name__rY   r~   r   r*   r3   r?   rB   rG   rQ   rb   re   rg   rh   rl   rn   rt   rv   r   r   r   r   r   r   r   r   r   <module>   s>    














	
