o
    Wi                     @  sx  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mZ d dlmZ d dlmZ d dlmZ d dlmZ dEddZejdFddZdGddZdHddZG dd deZdIddZdJd"d#Zd$d%dKd*d+ZdLd-d.Zej d/krd d0lm!Z! d dl"Z"G d1d2 d2Z#d$d%dKd3d4Z$neZ$dMd8d9Z%ej&d:k rdNd=d>Z'dOd?d@Z(ndOdAd@Z(dPdCdDZ)dS )Q    )annotationsN)Callable)	Generator)TracebackType)Any)parse_shebangexcr   returnbytesc                 C  s~   t t t| W  d    S 1 sw   Y  t t t|  W  d    S 1 s/w   Y  dt| j d S )Nz<unprintable z object>)	
contextlibsuppress	TypeErrorr
   	Exceptionstrencodetype__name__)r    r   C/home/ubuntu/.local/lib/python3.10/site-packages/pre_commit/util.pyforce_bytes   s    
 r   pathr   Generator[None]c                 c  s4    zdV  W dS  t y   tj| rt|   w )z2Cleans up the directory on an exceptional failure.N)BaseExceptionosr   existsrmtreer   r   r   r   clean_path_on_failure   s   r   filenamec                 C  s   t jd}||  S )Nzpre_commit.resources)	importlib	resourcesfilesjoinpath	read_text)r   r!   r   r   r   resource_text&   s   r$   Nonec                 C  s2   t | j}|tjB tjB tjB }t | | d S N)r   statst_modeS_IXUSRS_IXGRPS_IXOTHchmod)r   original_modenew_moder   r   r   make_executable+   s   r/   c                      s2   e Zd Zd fddZdddZdddZ  ZS )CalledProcessError
returncodeintcmdtuple[str, ...]stdoutr
   stderrbytes | Noner	   r%   c                   s.   t  |||| || _|| _|| _|| _d S r&   )super__init__r1   r3   r5   r6   )selfr1   r3   r5   r6   	__class__r   r   r9   2   s
   
zCalledProcessError.__init__c              
   C  sJ   ddd}d d| jd	 d
| j d	 d|| jdd|| jfS )Npartr7   r	   r
   c                 S  s   | rd|  dd  S dS )Ns   
       
s    (none))replacerstrip)r=   r   r   r   _indent_or_none@   s   z5CalledProcessError.__bytes__.<locals>._indent_or_none    z	command: 
zreturn code: s   stdout:r>   s   stderr:)r=   r7   r	   r
   )joinr3   r   r1   r5   r6   )r:   rA   r   r   r   	__bytes__?   s   

zCalledProcessError.__bytes__r   c                 C  s   |    S r&   )rE   decoder:   r   r   r   __str__M   s   zCalledProcessError.__str__)
r1   r2   r3   r4   r5   r
   r6   r7   r	   r%   )r	   r
   )r	   r   )r   
__module____qualname__r9   rE   rH   __classcell__r   r   r;   r   r0   1   s    
r0   kwargsdict[str, Any]c                 C  s   dD ]	}|  |tj qd S )Nstdinr5   r6   )
setdefault
subprocessPIPE)rL   argr   r   r   _setdefault_kwargsQ   s   rT   eOSErrortuple[int, bytes, None]c                 C  s   dt | dd d fS )N   r>   )r   r@   )rU   r   r   r   _oserror_to_outputV      rY   T)checkr3   r[   booltuple[int, bytes, bytes | None]c              
   O  s   t | ztj||dd}W n tjy* } z| \}}}W Y d }~n3d }~ww ztj|fi |}W n tyO } zt	|\}}}W Y d }~nd }~ww |
 \}}|j}| rd|rdt|||||||fS )Nenv)r^   )rT   r   normalize_cmdgetExecutableNotFoundError	to_outputrQ   PopenrV   rY   communicater1   r0   )r[   r3   rL   rU   r1   stdout_bstderr_bprocr   r   r   cmd_output_bZ   s$   
rh   tuple[int, str, str | None]c                  O  sF   t | i |\}}}|d ur| nd }|d ur| nd }|||fS r&   )rh   rF   )r3   rL   r1   re   rf   r5   r6   r   r   r   
cmd_outputt   s   
rj   win32)openptyc                   @  s>   e Zd ZdddZdddZdddZdd	d
ZdddZdS )Ptyr	   r%   c                 C  s   d | _ d | _d S r&   )rwrG   r   r   r   r9      s   
zPty.__init__c                 C  s\   t  \| _| _t| j}t|d tsJ |d  tjtjB  M  < t	| jtj
| | S NrX   )rl   rn   ro   termios	tcgetattr
isinstancer2   ONLCROPOST	tcsetattrTCSANOW)r:   attrsr   r   r   	__enter__   s   zPty.__enter__c                 C  s$   | j d urt| j  d | _ d S d S r&   )ro   r   closerG   r   r   r   close_w   s   

zPty.close_wc                 C  s$   | j d usJ t| j  d | _ d S r&   )rn   r   rz   rG   r   r   r   close_r   s   
zPty.close_rexc_typetype[BaseException] | None	exc_valueBaseException | None	tracebackTracebackType | Nonec                 C  s   |    |   d S r&   )r{   r|   )r:   r}   r   r   r   r   r   __exit__   s   zPty.__exit__N)r	   r%   )r	   rm   )r}   r~   r   r   r   r   r	   r%   )r   rI   rJ   r9   ry   r{   r|   r   r   r   r   r   rm      s    



rm   c           	      O  s  | du sJ |d t jksJ |d t| zt|}W n tjy5 } z
| W  Y d }~S d }~ww ttj	}t
 }|jd usGJ |||j|jd zt j|fi |}W n$ ty } zt|W  Y d }~W  d    W  d    S d }~ww |  d}	 z	t|jd}W n ty } z|jtjkrd}n W Y d }~n	d }~ww ||7 }|snqW d    n1 sw   Y  W d    n1 sw   Y  | |d fS )NFr6   rN   rB   Ti   )rQ   STDOUTrT   r   r_   ra   rb   openr   devnullrm   rn   updatero   rc   rV   rY   r{   readerrnoEIOwait)	r[   r3   rL   rU   r   ptyrg   bufbtsr   r   r   cmd_output_p   sP    r   funcCallable[[str], object]r   c                 C  sn   | t jt jt jfv r6t|tr6|jtjtjhv r6|t j	
|fD ]}t |t |jtjB  q | | d S  r&   )r   rmdirremoveunlinkrs   rV   r   EACCESEPERMr   dirnamer,   r'   r(   S_IWUSR)r   r   r   pr   r   r   _handle_readonly   s   r   )      excinfo8tuple[type[BaseException], BaseException, TracebackType]c                 C  s   t | ||d S rp   )r   )r   r   r   r   r   r   _handle_readonly_old   s   r   c                 C  s   t j| dtd d S )NF)ignore_errorsonerror)shutilr   r   r   r   r   r   r      s   r   c                 C  s   t j| dtd dS )z+On windows, rmtree fails for readonly dirs.F)r   onexcN)r   r   r   r   r   r   r   r      s   sc                 C  s   t jdkr| S |  dS )Nrk   z.exe)sysplatform)r   r   r   r   win_exe   rZ   r   )r   r   r	   r
   )r   r   r	   r   )r   r   r	   r   )r   r   r	   r%   )rL   rM   r	   r%   )rU   rV   r	   rW   )r3   r   r[   r\   rL   r   r	   r]   )r3   r   rL   r   r	   ri   )r   r   r   r   r   r   r	   r%   )r   r   r   r   r   r   r	   r%   )r   r   r	   r%   )r   r   r	   r   )*
__future__r   r   r   importlib.resourcesr   os.pathr   r   r'   rQ   r   collections.abcr   r   typesr   typingr   
pre_commitr   r   contextmanagerr   r$   r/   RuntimeErrorr0   rT   rY   rh   rj   r   rl   rq   rm   r   r   version_infor   r   r   r   r   r   r   <module>   sL    




 


%(



